65.9K
CodeProject 正在变化。 阅读更多。
Home

使用 RadControls for Silverlight 实现无与伦比的性能!处理 5000 万个单元格从未如此快速

2010年3月16日

CPOL

7分钟阅读

viewsIcon

20948

本白皮书解释了 RadControls for Silverlight 如何通过智能地使用 UI 和数据虚拟化、内容回收、XAML 优化等技术,提供一流的性能。

(处理 5000 万个单元格从未如此快速)

Telerik Silverlight 控件的性能

在 Telerik,我们深知 UI 控件的性能对于您的业务线 (LOB) 应用程序至关重要,而确保 RadControls for Silverlight 帮助您实现无与伦比的性能一直是我们的首要任务。

性能可能是营销人员最喜欢的三个词之一,但其确切含义通常不是很清楚。然而,本文将用事实和例子来阐述性能这一概念。它解释了我们在设计 RadControls for Silverlight 时所使用的技术。

UI 和数据虚拟化

为了保持我们控件的最佳性能,Telerik 在我们的套件中更注重数据的控件中融入了 UI 和数据虚拟化的概念。在最简单的场景中,利用这种虚拟化涉及将元素放入 VirtualizingStackPanel 中,从而获得仅生成屏幕上可见的 UI 元素并占用内存的优势。这意味着,例如,如果您有一个包含 10,000 个项目的组合框,则只创建下拉列表中可见的约 15 个项目,其他项目存在于数据集中但不需要视觉元素。考虑到这一核心概念,我们的开发团队已开始将虚拟化技术整合到以下控件中:

RadGridView

通过结合使用 UI 虚拟化和容器回收,Telerik Silverlight Grid 已被优化,可以轻松处理最大和最小的数据集。即使虚拟化正在进行,仍然需要考虑一个问题——每次单元格进入视图时,都会为其创建一个新元素,导致大量流量往返于垃圾回收,这意味着在执行操作甚至只是滚动网格时,内存会被占用和释放。容器回收是我们的解决方案,它一次性创建数据项的容器,然后当您滚动、分组和排序数据时重复使用这些容器。RadGrid 不再与垃圾回收来回交互并创建新元素,而是简单地重复使用已创建的元素,从而在客户端实现闪电般的滚动和数据操作。

在此查看 Telerik Silverlight Grid 处理 5000 万个单元格。

RadTreeView

在许多情况下,分层数据集不会只有十到十五个项目,而是会跨越数百甚至数千个节点。在使用树视图时,您有几个选项,因为分层数据结构在利用性能和提供高性能树视图所需功能方面提供了一些独特的挑战。

您可以利用的一个选项是按需加载功能,它使您只在需要时才加载和创建数据,从而减轻控件的初始加载。在典型场景中,这意味着您从创建少数元素开始,最终在内存中管理数百个元素并利用资源。当选择一个项目时,子项目会被加载和创建——在此之前,您只需担心最初在根目录中加载的视觉元素数量。

在此基础上,我们已将 UI 虚拟化和项目缓存整合到 RadTreeView 中,从而实现更好的数据加载和访问。通过这种组合,根级别项目被虚拟化(从而在大列表下实现最佳性能),而子节点则被缓存一段时间。利用这些技术,RadTreeView 能够为大型和小型数据集提供无缝性能,同时不会占用超出 RadTreeView 所包含丰富功能所需的任何额外内存。

image001.jpg

RadChart

数据虚拟化方法也为Telerik Silverlight Chart带来了显著的性能提升,即使处理数百万条记录也是如此。秘诀在于并非所有数据都实际显示在屏幕上——它被汇总了。RadChart 通过一种称为**采样**的技术实现了这一点。控件将数据分成组,并使用众多提供的采样函数之一(您甚至可以编写自己的函数)聚合每个组。最终结果是生成一个图表,该图表足够接近地总结了真实数据,同时性能无限快。

image002.gif

为了更方便地深入和导航整个数据源,我们还提供了缩放和滚动功能以及修改后的 RadSlider,使其浏览更加便捷。

image003.gif

数据绑定

我们的开发团队已竭尽全力,确保您在使用 RadControls for Silverlight 访问和使用数据时有多种选择。利用 Silverlight 框架提供的丰富数据绑定引擎,您有多种填充控件的选项。

  • WCF 服务 – 使用 WCF 服务让您可以通过自定义操作控制客户端之间的数据传输。轻松将 RadControl 的 .ItemsSource 绑定到操作的生成数据集,或在应用程序中处理之前将其用于复杂操作。
  • ADO.Net Data Services – 在使用 Entity Framework 时很有用,ADO.Net Data Services 有助于利用 HTTP 请求在客户端和服务器之间发送和接收数据。
  • WCF RIA 服务 – Telerik 一直紧跟 WCF RIA 服务的最新版本,并致力于在我们的 Silverlight 3 官方版本和 Silverlight 4 CTP 版本中无缝支持两者。利用 WCF RIA 服务,您可以快速轻松地设计数据层,包括元数据和验证,该数据层可在服务器和客户端之间维护对象模型,并允许轻松进行数据操作。

XAML 优化

人们初次接触 Silverlight 时遇到的主要问题之一是,创建一个控件模板需要多少行 XAML 代码,更不用说后台使控件真正工作的代码了。对于像 RadGridView 这样的控件,需要考虑很多因素,它具有层次结构、添加新行和行选择等不同的视觉状态。考虑到这一点,我们的团队已经开始努力减少我们所有模板中的视觉元素,并牢记以下几个目标。

首先,减少在网格、图表或调度程序中显示任何数据项所需的视觉元素数量,意味着使用的内存更少,因为需要创建的对象更少。对于像按钮这样的简单控件,这可能不是问题,但是当您考虑在最简单的场景(即使在虚拟化网格中)中需要同时显示多少个网格单元格时,数字可能会非常惊人。以 RadGridView 为例,我们最近减少了显示网格所需的视觉元素数量,因此在显示 10x10 网格的应用程序中,每删除一个元素,您立即减少了 100 个视觉元素的创建。将其扩展到具有大量数据的更大网格,您可以看到这将如何有益。

提高性能的另一种方法是找到更好的方法来实现相同的结果。在过去的两个发布季度中,RadGridView 团队成功将 RadGridView 模板所需的总 XAML 减少了 30% 以上,同时增加了功能。这不仅带来了更好的性能,还使从事控件任何自定义的开发人员和设计人员更容易理解控件模板和所有涉及的不同元素。使 XAML 更具可读性可能对您的最终用户意义不大,但您一定会注意到我们团队对细节的关注以及使用我们的控件的便捷性。

在此处阅读更多内容并查看示例

© . All rights reserved.