Silverlight Virtualization Overview
当ListBox使用StackPanel作为容器时,如果数据源包含大量数据时,每一条数据都要创建可视化的Item来承载数据,创建这些容器就需要消耗很多时间和内存,另外滚动也非常慢,因为需要计算所有这些Item的大小和位置
如下图所示是ListBox在默认情况下加载10000个Gamer(只定义了Id和Name属性)对象时,IE的内存使用情况,此时滚动非常顺畅: 
如果我们将ListBox的ItemsPanel修改为StackPanel会如何呢?下图是修改为StackPanel后IE的内存使用情况,此时滚动已经非常缓慢:

295264k 对 56372k,大概在5倍左右的差距,很显然ListBox默认使用的ItemsPanel不是StackPanel,而且可以很好的处理大量的数据加载,我们不用做任何的额外处理
对于这类问题目前有两种解决方案:
UI virtualization
最佳的一种解决方案,其核心思想就是延迟生成每个Item,只有这些Item滚动到可视区域时才显示这些Item,在Silverlight中UI virtualization是通过VirtualizingStackPanel来实现的,VirtualizingStackPanel计算哪些Item可见,然后只为这些可见Item创建UI元素,这样实际创建的UI元素非常少,内存消耗就少,每次滚动时,也不需要计算每个Item的大小和位置,只需要计算哪些Item可见,然后为这些Item创建UI元素就可以了,滚动就非常顺畅;VirtualizingStackPanel包含两种模式:standard and recycling,standard模式就是每次Item进入可视区域都会重新创建UI元素,而recycling模式则会重用之前已经创建好的UI元素,使用该模式内存消耗更少,滚动更平滑
Data virtualization
其核心思想是不一次性加载所有数据,只加载用户可以看到的数据,比如ListBox只加载滚到可视区域的数据,在Silverlight中实现Data virtualization主要是通过PagedCollectionView实现,PagedCollectionView提供分组、排序、过滤等许多功能,使用非常灵活、方便,其核心思想就是内部维护所有Item的集合,这个集合不会和ItemsControl进行绑定,将需要在界面中展示的那些数据包装成另外一个集合,这个集合与ItemsControl进行绑定,因为这个集合容量较小,所以实际上创建的UI元素非常少,节省内存,具体使用方法请参考MSDN,这里不再赘述
其他
WPF中ScrollViewer提供了IsDeferredScrollingEnabled属性支持Defer Scrolling,而Silverlight没有暴露这个属性不支持DeferScrolling
参考资料
http://www.silverlightshow.net/items/Virtualization-in-Silverlight-4-RC.aspx
Silverlight Virtualization Overview的更多相关文章
- 为WPF和Silverlight的Grid添加边框线(zz)
Grid是WPF和Silverlight中的一个重要的布局元素,其他的布局元素还有StackPanel, Canvas, Border等等.从字面上说,Grid是一个表格的意思,它的使用也确实很方 ...
- Silverlight开源项目与第三方控件收集
http://easysl.codeplex.com/ http://compositewpf.codeplex.com/ http://silverlight.codeplex.com/releas ...
- [MVCSharp]MVC# Overview概述
MVC# Overview概述 Abstract: This article gives an overview of MVC# - a Model-View-Presenter framework ...
- WSL(Windows Subsystem for Linux)--Pico Process Overview
[转载] Windows Subsystem for Linux -- Pico Process Overview Overview This post discusses pico processe ...
- Docker7之Docker overview
Docker is an open platform for developing, shipping, and running applications. Docker enables you to ...
- 转载:Why using Single Root I/O Virtualization (SR-IOV) can help improve I/O performance and Reduce Costs
Introduction While server virtualization is being widely deployed in an effort to reduce costs and o ...
- Photon——Feature Overview 功能概述
Photon——Feature Overview 功能概述 Feature Overview 功能概述 Photon is a real-time socket server and ...
- Build System 和Test Framework overview总结
良好的自动化系统可以帮助Dev/Tester快速发现product/test code issue. 正好上一个项目结束,上个项目在自动化系统上面做得非常好.从产品开始时半年release一次到后面每 ...
- 精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能)
原文:精通 WPF UI Virtualization (提升 OEA 框架中 TreeGrid 控件的性能) 本篇博客主要说明如何使用 UI Virtualization(以下简称为 UIV) 来提 ...
随机推荐
- linux 分发同步脚本与分发命令脚本
同步脚本,在第5步要拼接自己配置的主机名 #!/bin/bash # 获取输入参数个数,如果没有参数,直接退出 pcount=$# )); then echo no args; exit; fi # ...
- python于lxml应用
首先下载lxml, http://www.lfd.uci.edu/~gohlke/pythonlibs/ ,然后加入引用 from lxml import _elementpath as DONTUS ...
- OpenCL编程基本流程及完整示例
1. 选择OpenCL平台并创建一个上下文 平台(Platform)是指主机和OpenCL管理框架下的若干个设备构成的可以运行OpenCL程序的完整硬件系统,这个是跑OpenCL程序的基础,所以第一步 ...
- 实战caffe多标签分类——汽车品牌与车辆外观(C++接口)[详细实现+数据集]
前言 很多地方我们都需要用到多标签分类,比如一张图片,上面有只蓝猫,另一张图片上面有一只黄狗,那么我们要识别的时候,就可以采用多标签分类这一思想了.任务一是识别出这个到底是猫还是狗?(类型)任务二是识 ...
- 各种图示的介绍及绘制(boxplot、stem)
1. 箱线图(boxplot) 也叫作箱形图: 一种用作显示一组数据分散情况资料的统计图.因形状如箱子而得名.在各种领域也经常被使用,常见于品质管理. 主要包含六个数据节点,将一组数据从大到小排列,分 ...
- Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008
Atitit.软件button和仪表板(13)--全文索引操作--db数据库子系统mssql2008 全文索引操作 4.全文索引和like语句比較 1 5.倒排索引 inverted index 1 ...
- linux nano 命令
linux nano一linux像pico文本编辑软件,功能少.但是,基本能满足要求
- thinkphp 删除所有缓存 Rumtime 以及 Html 静态缓存
<?php /** * This is not a free software, All Copyright @F.Z.B * Date: 14-8-12 下午4:08 * File: Cach ...
- 模拟请求(模拟header gzip解压 泛型)
WebClient HeaderData是自定义类对象,存储header信息 private static T GetDataCommonMethod<T>(string url, str ...
- JS 密码弱中强显示
<!DOCTYPE html><html><head> <meta http-equiv="Content-Type" conten ...