我有一个窗口,使用绑定到ObservableCollection的WPF ListView / GridView。表演完全可怕。每次添加/删除/修改项目时,应用程序都会尝试加载300-400项和CPU使用率峰值。分析并没有发现任何明显的东西。
有人有任何建议吗?
答案 0 :(得分:8)
检查这些属性:
VirtualizingStackPanel.IsVirtualizing="True"
VirtualizingStackPanel.VirtualizationMode="Recycling"
ScrollViewer.IsDeferredScrollingEnabled="True"
答案 1 :(得分:5)
您需要按照本文中的说明虚拟化您的ListView ItemSsource:{strong> WPF: Data Virtualization {strong} {<3}} Paul McClean
答案 2 :(得分:2)
首先猜测,您是否正在为每个ListViewItem使用复杂的数据模板?这可能是从许多图像到(旧)BitmapEffects,甚至是从数据库中按需获取数据的延迟加载属性(这可能会导致您执行许多db调用来呈现每个视觉效果,具体取决于数据模型的方式)作品)。
第二个猜测,列表本身能够快速运行其加载/添加/修改/删除的例程(意味着在呈现数据时出现问题),或列表本身是否缓慢地执行这些作业(表明列表中有一些一种问题)。
答案 3 :(得分:1)
您是否按照此问题中的建议尝试了虚拟化?
WPF ListView Very Slow Performance - Why? (ElementHost, or Other Reason?)
答案 4 :(得分:1)
显而易见的是,确保你已升级到.net 3.5 SP1,那里有很多性能提升。
同样值得研究一下WPF datagridview控件,因为.net 3.5 SP1中的许多性能工作都是如此,因此datagridview在大型数据集上具有良好的性能。
http://wpf.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=25047
答案 5 :(得分:0)
我有类似的问题。将MaxHeight
设置为大于ListView
实际高度的值,这要归功于here,对我来说立即解决了这个问题,但是我仍然不明白它是如何工作的。