没有虚拟化的WPF DataGrid性能

Rob*_*gel 6 c# wpf performance datagrid mvvm

我刚才有一个关于Microsofts PresentationFramework的问题DataGrid:

我有一个ObservableCollection<TestModel>.TestModel是一个简单的类,具有20个Int属性......仅此而已.在我的测试中,我有50个参赛作品ObservableCollection.总的来说,我有1000个细胞(20*50).所有这些单元格都会立即显示,因此实际上无法实现虚拟化.

这是我的网格:

<DataGrid AutoGenerateColumns="true" RowHeight="20" ItemsSource="{Binding DataGridModelSource}"/>
Run Code Online (Sandbox Code Playgroud)

在我看来,要呈现的1000个单元格不是很多......虽然它需要,取决于我运行此测试的系统,大约需要1到3秒来渲染这些1000个单元格.那是相当多的,不是吗?

我使用DataGridsC1,Infragistics,Mindscape或DX中的一个定制进行了相同的测试,并且使用所有这些网格将渲染这1000个单元的时间减少到大约100ms.

那么微软有DataGrid什么意义呢?有什么方法可以改善性能吗?我错过了什么吗?

Dan*_*şar 0

使用 BindingList ( https://msdn.microsoft.com/en-us/library/ms132679%28v=vs.110%29.aspx ) 而不是 ObservableCollection。问题是你必须自己实现分组、排序等,但它应该更快。

您可以做的其他事情是简化当前主题的样式。您可以使用https://wpfinspector.codeplex.com/来查找某些内容(即使它是默认的 Windows 主题)