【问题标题】:WPF .NET 4 DataGrid Column PerformanceWPF .NET 4 DataGrid 列性能
【发布时间】:2012-07-07 22:12:09
【问题描述】:

我正在使用 .NET 4 WPF DataGrid,并注意到在使用大量列时垂直滚动性能不佳。这是我为测试它所做的:

  1. 启用虚拟化(VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling")
  2. 将 DataGrid 嵌入到简单的网格布局中,并且此窗口中没有其他控件
  3. 这些列没有自定义格式,没有图像 - 只是简单的文本
  4. 我在一台相当不错的计算机上运行。 win7(64 位)在四核 3.2gz 上,8gb ram 和 radeon 7800 系列卡
  5. 使用 Perforator 进行的测试没有显示任何不好的东西,例如软件渲染等

以下是一些结果:

  • 100 行 x 5 列:平滑滚动
  • 100,000 行 x 5 列:平滑滚动
  • 100 行 x 75 列:滚动性能非常差
  • 100,000 行 x 75 列:完全冻结

当我有大量列 (~75 - 100) 时,如何提高垂直滚动性能?

谢谢

【问题讨论】:

  • 75 列是否有意义,即使它工作得完美无缺?我建议默认情况下只使用重要的列,并将可选列的按字母顺序排序的列表显示为网格一侧的复选框,可以根据用户的请求使其可见。

标签: wpf performance datagrid


【解决方案1】:

您缺少两个非常重要的属性:

同时启用它们,看看是否会有所不同。它应该会有所帮助。

我有大约 20 列,大约 2,500 行,我没有看到性能问题,但 75 列肯定看起来很多。您可能想研究在标题中添加右键单击启用/禁用列(类似于 excel)。

【讨论】:

  • 谢谢。这两个属性帮助很大。禁用 virtualizingstackpanel 并启用这两个属性会产生很大的不同。我现在能够管理 75 列 x 10,000 行。我的应用程序是一个类似 excel 的应用程序,用户通常在 300 列中选择 75 - 150 列。他们将应用程序扩展到多个监视器。因此,这个例子实际上是一个真实的生活场景。此更改现在最多可用于 90 列。想知道有没有办法让它工作 150。谢谢你的帮助
  • @Rhino,我有同样的情况,你的意思是解决方法是 EnableColumnVirtualization="True" EnableRowVirtualization="True" VirtualizingStackPanel.IsVirtualizing="False" 吗?在我的情况下,它几乎停止,滚动很慢
  • 感谢@daub815 的回复,但您的意思是“关闭窗格的stackpanel 虚拟化”?您的意思是将 itempanel 更改为 stackpanel 期望的虚拟化 onr 吗?
  • @ArsenMkrt 我需要查看您的 xaml 的其余部分以了解此问题与您的问题之间的区别。也许您应该发布另一个 stackoverflow 问题。
猜你喜欢
  • 2011-05-31
  • 2013-11-24
  • 1970-01-01
  • 2011-04-10
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-07-18
  • 2012-06-23
相关资源
最近更新 更多