WPF .NET 4 数据表格列的性能问题

3
我正在使用.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行x5列:平稳滑动
  • 100,000行x5列:平稳滑动
  • 100行x75列:非常糟糕的滚动性能
  • 100,000行x75列:完全冻结
当我有大量列(~75 - 100)时,我该怎么做来提高垂直滚动性能?
谢谢

即使它完美无缺,75列是否有意义?我建议默认仅使用重要列,并在网格的侧面显示按字母顺序排序的可选列列表作为复选框,用户可以根据需要将其显示出来。 - doblak
1个回答

5
您缺少两个非常重要的属性: 启用这两个属性,看看是否有所改善。这应该会有所帮助。
我有大约20列左右,大约有2,500行,我还没有遇到性能问题,但是75列肯定看起来很多。您可能需要调查在标题中添加右键启用/禁用列的方法(类似于Excel)。

谢谢。这两个属性帮了很大的忙。禁用VirtualizingStackPanel并启用这两个属性产生了很大的差异。我现在能够管理75列x 10,000行。我的应用程序类似于Excel,用户通常在300列中选择75-150列。他们将应用程序扩展到多个监视器上。因此,这个例子实际上是一个真实的场景。这个更改现在适用于最多90列。不知道是否有办法让它适用于150列。感谢您的帮助。 - Rhino
@Rhino,我有同样的情况,你的意思是解决方法是EnableColumnVirtualization="True" EnableRowVirtualization="True" VirtualizingStackPanel.IsVirtualizing="False"吗?在我的情况下,它几乎停止了,滚动非常缓慢。 - Arsen Mkrtchyan
感谢@daub815的回复,但是你所说的“关闭StackPanel虚拟化面板”是什么意思?你是指将ItemPanel更改为非虚拟化的StackPanel吗? - Arsen Mkrtchyan
@ArsenMkrt 我需要看到你的其余XAML代码才能理解这个问题和你的问题之间的区别。也许你应该发布另一个stackoverflow问题。 - kevindaub

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