【发布时间】:2010-09-30 20:36:24
【问题描述】:
我有一个带有显示分组数据的 DataGrid 的窗口。
我在 WPF DataGrid 中加载大约 4 x 300 个项目,这些项目分为 4 个组。
分组禁用虚拟化。
我设置了 IsAsync="True",所以我的窗口打开得很快,但 DataGrid 在 11 秒后才被填满???
如何加快数据的加载/显示速度?
【问题讨论】:
标签: wpf datagrid performance grouping
我有一个带有显示分组数据的 DataGrid 的窗口。
我在 WPF DataGrid 中加载大约 4 x 300 个项目,这些项目分为 4 个组。
分组禁用虚拟化。
我设置了 IsAsync="True",所以我的窗口打开得很快,但 DataGrid 在 11 秒后才被填满???
如何加快数据的加载/显示速度?
【问题讨论】:
标签: wpf datagrid performance grouping
您自己说过 - 分组禁用虚拟化;我认为现在单独显示每个组(在其自己的数据网格中)是可行的方法……或者其他类似的技巧,根本不使用分组显示所有项目。
很久以后的编辑: 实际上,http://jerryclin.wordpress.com/2008/02/22/listbox-grouping-and-virtualization/ 上有一篇非常有趣的文章,内容是如果您真的需要使用虚拟化进行 ListBox 分组,该如何做。不确定这是否值得痛苦,但有可能。
【讨论】:
不确定它是否相关,但我在 DataGrid 中遇到了类似的问题,在该问题中,在调整窗口大小、列排序等之后需要几秒钟的时间来刷新,并在执行此操作时锁定了窗口 UI(1000 行, 5 列)。
这归结为 WPF 大小计算的问题(错误?)。我将它放在 RowDefinition Height="Auto" 的网格中,这导致渲染系统在运行时尝试通过测量每一列和每一行的大小来重新计算 DataGrid 的大小,大概是通过填充整个网格(据我了解)。它应该以某种方式智能地处理这个问题,但在这种情况下它不是。
快速检查这是否是相关问题是在测试期间将 DataGrid 的 Height 和 Width 属性设置为固定大小,然后再次尝试运行。如果您的性能得到恢复,则可以使用以下选项进行永久性修复:
【讨论】:
在 .NET 4.5.2 中虚拟化分组项目终于成为可能:
<DataGrid VirtualizingPanel.IsVirtualizingWhenGrouping="True" />
【讨论】: