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) 来提 ...
随机推荐
- SpringCloud学习笔记-zuul网关
公司目前使用的是dubbo方式实现微服务,想试水改造接口层服务为Spring Cloud, 以下是网络拓补图. 第一层负载均衡可以用nginx或者zuul(即有2层zuul), 本图画的是nginx. ...
- Project Euler:Problem 39 Integer right triangles
If p is the perimeter of a right angle triangle with integral length sides, {a,b,c}, there are exact ...
- 如何只安装dependencies
npm install --production 这样就会跳过devDependencies配置 参考链接 https://docs.npmjs.com/cli/install (如果想安装devDe ...
- 经典书单、站点 —— 大数据/数据分析/R语言
1. 科普.入门 <大数据智能>,刘知远.崔安顺等著: 特色:系统,宏观和全面: 2. R 语言站点 http://langdawei.com/:R 语言数据采集与可视化:
- Robot Framework 快速入门_中文版
目录 介绍 概述 安装 运行demo 介绍样例应用程序 测试用例 第一个测试用例 高级别测试用例 数据驱动测试用例 关键词keywords 内置关键词 库关键词 用户定义关键词 变量 定义变量 使用变 ...
- NS2网络模拟(6)-homework02.tcl
1: #NS2_有线部分\homework02.tcl 2: 3: #Create a simulator object 4: set ns [new Simulator] 5: 6: #Define ...
- AntDesign Form表单字段校验的三种方式
1.使用getFieldDecorator的rules规则 最简单的方法就是使用getFieldDecorator中的rules验证.rules中定义校验规则,message为校验不通过时的提示文字. ...
- xmpp和OpenFire示例,即时聊天室,支持离线消息
让我说说为什么写这个博客,这是因为我在上周末的研究XMPP和OpenFire,从互联网上下载Demo,但跑不起来.它花了很长的时间.它被改造.抬高.篇博文也是希望后边学习XMPP和OpenFire的同 ...
- MVC 自动装配
//HelloController.cs using FirstMVC.Models; using System;using System.Collections.Generic;using Syst ...
- 2018年Unity结合Android SDK下载安装及配置教程
原文:2018年Unity结合Android SDK下载安装及配置教程 首先声明: Unity版本2017.1f3 最近试着在Unity中利用网易做AR开发时,发布项目文件需要发布到An ...