程序员和网站建设企业搭建pc端网站
web/
2025/10/8 22:21:25/
文章来源:
程序员和网站建设,企业搭建pc端网站,怎样建网站步骤,怎么做qq钓鱼网站吗WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能#xff0c;还需要能够处理大量数据而不会降低显示速度和消耗大量内存#xff0c;WPF提供了相关的控件以提高性能#xff0c;所有继承自ItemsControl的控件都支持该技术。
虚拟化
UI虚拟化是列表仅仅为当前显示项创建…WPF列表性能提高技术
WPF数据绑定系统不仅需要绑定功能还需要能够处理大量数据而不会降低显示速度和消耗大量内存WPF提供了相关的控件以提高性能所有继承自ItemsControl的控件都支持该技术。
虚拟化
UI虚拟化是列表仅仅为当前显示项创建容器对象的一种技术。例如ListBox控件具有1000条记录但是每次只能显示30条记录则ListBox仅仅只创建30个ListBoxItem就可以了。
UI虚拟化技术其实并不是ItemsControl类的实现而是使用VirtualizingStackPanel容器来实现的它除了增加虚拟化的支持其他都和StackPanel功能类似。像ListBox、ListView、DataGrid等都是使用了该容器来布局子元素。注意ComboBox使用的是StackPanel所以不支持虚拟化需要自定义ItemsPanelTemplate来实现虚拟化
ComboBoxComboBox.ItemsPanelItemsPanelTemplateVirtualizingStackPanel//ItemsPanelTemplate/ComboBox.ItemsPanel
/ComboBoxTreeView同样支持虚拟化但是默认关闭。TreeView VirtualizingStackPanel.IsVirtualizingTrue/
破坏虚拟化意外情况
ScrollViewer中放置列表控件
ScrollViewer会提供无限的虚拟空间但是如果在该虚拟空间中放置列表控件后如ListBox,ListBox会以完整尺寸渲染本身然后显示所有的子项这样每项在内存中都有各自的ListBoxItem对象。其实将ListBox放到任何不限制其尺寸的容器中都有这个问题比如将ListBox放到StackPanel中。
改变列表控件的模板并且没有使用ItemsPresenter
ItemsPresenter使用了ItemsPanelTemplate,该模板制定了VirtualizingStackPanel面板。
不使用数据绑定
使用编程的方式填充列表不会使用虚拟化。
容器再循环
当滚动支持虚拟化列表时控件会不断释放旧的对象且创建新的项容器对象。但是启用了容器再循环则保持少量的Items存活滚动时加载这些Items这样垃圾收集器不需要查找旧的对象并释放。默认DataGrid开启该特性。其他控件需自行设定。
ListBox VirtualizingStackPanel.VirtualizationModeRecycling/
缓存长度
VirtualizingStackPanel其实会多创建几个超过显示范围的子项以便于滚动时直接显示。可以使用CacheLength和CacheLengthUnit调整缓存精度。缓存是以优先级较低的后台线程上进行缓存。
!--缓存可见项之前和之后的附加页--
ListBox VirtualizingStackPanel.CacheLength1 VirtualizingStackPanel.CacheLengthUnitPage/
!--缓存可见项之前和之后的100项--
ListBox VirtualizingStackPanel.CacheLength100 VirtualizingStackPanel.CacheLengthUnitItem/
!--缓存可见项之前100之后500项--
ListBox VirtualizingStackPanel.CacheLength100,500 VirtualizingStackPanel.CacheLengthUnitItem/延迟滚动
延迟滚动可以让用户在滚动条上拖动滑块时不会更新列表显示。只有当用户释放了滑块后才刷新。
ListBox ScrollViewer.IsDeferredScrollingEnabledTrue/
VirtualizingStackPanel默认是基于项的滚动也就是至少滚动显示出一个完整项目可以自行设置是基于项的滚动还是像素的滚动。
ListBox VirtualizingStackPanel.ScrollUnitPixel/
注意ItemsControl本身默认不启用虚拟化
为ItemsControl开启虚拟化参考ItemsControl的常见用法最后一章节
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89293.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!