【问题标题】:WPF DataGrid is extremly slow, how can I improve the Initial Loading time?WPF DataGrid 非常慢,如何提高初始加载时间?
【发布时间】:2010-09-30 20:36:24
【问题描述】:

我有一个带有显示分组数据的 DataGrid 的窗口。

我在 WPF DataGrid 中加载大约 4 x 300 个项目,这些项目分为 4 个组。

分组禁用虚拟化。

我设置了 IsAsync="True",所以我的窗口打开得很快,但 DataGrid 在 11 秒后才被填满???

如何加快数据的加载/显示速度?

【问题讨论】:

    标签: wpf datagrid performance grouping


    【解决方案1】:

    您自己说过 - 分组禁用虚拟化;我认为现在单独显示每个组(在其自己的数据网格中)是可行的方法……或者其他类似的技巧,根本不使用分组显示所有项目。

    很久以后的编辑: 实际上,http://jerryclin.wordpress.com/2008/02/22/listbox-grouping-and-virtualization/ 上有一篇非常有趣的文章,内容是如果您真的需要使用虚拟化进行 ListBox 分组,该如何做。不确定这是否值得痛苦,但有可能。

    【讨论】:

    • +1。我通过在主/细节样式中使用两个网格来解决这个问题。将内存使用量从大约 3 GB 减少到更合理的程度!
    【解决方案2】:

    不确定它是否相关,但我在 DataGrid 中遇到了类似的问题,在该问题中,在调整窗口大小、列排序等之后需要几秒钟的时间来刷新,并在执行此操作时锁定了窗口 UI(1000 行, 5 列)。

    这归结为 WPF 大小计算的问题(错误?)。我将它放在 RowDefinition Height="Auto" 的网格中,这导致渲染系统在运行时尝试通过测量每一列和每一行的大小来重新计算 DataGrid 的大小,大概是通过填充整个网格(据我了解)。它应该以某种方式智能地处理这个问题,但在这种情况下它不是。

    快速检查这是否是相关问题是在测试期间将 DataGrid 的 Height 和 Width 属性设置为固定大小,然后再次尝试运行。如果您的性能得到恢复,则可以使用以下选项进行永久性修复:

    • 将包含元素的大小更改为相对 (*) 或 固定值
    • 将 DataGrid 的 MaxHeight 和 MaxWidth 设置为更大的固定值 比正常使用时更容易
    • 尝试使用不同大小调整策略(Grid、DockPanel 等)的其他容器类型

    【讨论】:

      【解决方案3】:

      在 .NET 4.5.2 中虚拟化分组项目终于成为可能:

      <DataGrid VirtualizingPanel.IsVirtualizingWhenGrouping="True" />
      

      https://msdn.microsoft.com/en-us/library/system.windows.controls.virtualizingpanel.isvirtualizingwhengrouping%28v=vs.110%29.aspx

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-15
        • 2019-06-15
        • 1970-01-01
        • 2018-08-08
        相关资源
        最近更新 更多