UI虚拟化和数据虚拟化 - zLulus/My_Note GitHub Wiki
摘抄自WPF:数据虚拟化、WPF的UI虚拟化、WPF 列表虚拟化时的滚动方式
UI虚拟化
当一个WPF的ItemControl被绑定到一个大型集合的数据源时,如果可以UI虚拟化,该控件将只为那些在可以看到的项创见可视化的容器(加上面和下面的少许)。这是一个完整集合中有代表性的一小部分。用户移动滚动条时,将为那些滚动到可视区域的项创建新的可视化容器,那些不再可见的项的容器将被销毁。当容器设置为循环使用时,它将再使用可视化容器代替不断的创建和销毁可视化容器,避免对象的实例化和垃圾回收器的过度工作。
UI虚拟化的原理是:但是由于显示器和人眼的限制,用户往往只会同时看到其中的数十条数据,因此只要在界面上渲染用户所看到的那些数据即可。
关于UI虚拟化的实现,其核心则是VirtualPanel
。通过VirtualizingPanel,设置列表ListBox/ListView/DataGrid是否开启虚拟化。
VirtualizingPanel.ScrollUnit="Pixel"--虚拟化滚动单位(像素/单元)
VirtualizingPanel.IsVirtualizing="True" --是否虚拟
VirtualizingPanel.VirtualizationMode="Recycling"
VirtualizingPanel.CacheLengthUnit="Item" --缓存单位
VirtualizingPanel.CacheLength="20,20"-上下缓存数量
数据虚拟化
数据虚拟化是指绑定到ItemControl的真实的数据对象的归档虚拟化的时间段。数据虚拟化不是由WPF提供的。作为对比,基本数据对象的小集合对内存的消耗不是很多;但是,大集合的内存消耗是非常严重的。另外,真实的检索数据(例如,从数据库)和实例化数据对象是很耗时的,尤其当是网络数据调用时。因此,我们希望使用数据虚拟化机制来限制检索的数据的数量和在内存中生成数据对象的数量。
数据虚拟化的核心是VirtualizingCollection<T>
、AsyncVirtualizingCollection<T>
。