WPF DataGrid性能优化:不使用虚拟化技术

7

我收到了一个关于Microsoft PresentationFramework的DataGrid的问题:

我有一个ObservableCollection<TestModel>。TestModel是一个简单的类,有20个Int属性...没有更多的东西。在我的测试中,我的ObservableCollection有50个条目。 因此,总共有1000个单元格(20 * 50)。所有这些单元格都同时显示,因此没有虚拟化。

这是我的网格:

<DataGrid AutoGenerateColumns="true" RowHeight="20" ItemsSource="{Binding DataGridModelSource}"/>

在我看来,渲染1000个单元格并不算太多……尽管根据我运行此测试的系统不同,渲染这1000个单元格需要大约1到3秒钟的时间。这还是相当长的时间,不是吗?
我使用了一些自定义的DataGrid,比如来自C1、Infragistics、Mindscape或DX的DataGrid,并且使用这些Grids渲染1000个单元格的时间缩短到了大约100毫秒。
那么Microsoft的DataGrid有什么意义呢?有没有什么方法可以提高性能?我是否遗漏了什么?

1
你确定1-3秒是渲染时间,而不是数据加载时间吗?确实很长,你有转换器、计算吗? - Arsen Mkrtchyan
是的,我正在测量数据加载时间...大约是50毫秒。我没有任何转换器或计算。那只是随机的整数值,放在文本块列中。 - Robert Nagel
1
DataGrid很“重”,但1-3秒似乎有点高。你需要编辑吗?ListView / GridView要快得多。 - paparazzo
你是否为每个单元格引发了一个 PropertyChanged 事件?如果是这样,你是从主线程调用它吗? - user2588666
我会把责任归咎于ObservableCollection。如果您直接绑定它并逐个添加项目,则可能会导致太多的重新计算。如果您不打算添加或删除项目,这似乎很可能,因为您已经说过您有固定数量的项目,我建议更改为轻量级集合类型。 - almulo
显示剩余4条评论
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接