2012-07-07 79 views
3

我正在使用.NET 4 WPF DataGrid,并且在使用大量列时注意到很差的垂直滚动性能。这里是我做过什么来测试这个:WPF .NET 4 DataGrid列性能

  1. 启用虚拟化(VirtualizingStackPanel.IsVirtualizing =“真” VirtualizingStackPanel.VirtualizationMode =“回收”)
  2. 嵌入在DataGrid中简单的网格布局,也没有其他控件在这个窗口
  3. 列没有自定义格式,没有图像 - 只是简单的文字
  4. 我在一台相当不错的电脑上运行。 WIN7(64位)与8GB的内存和Radeon 7800系列卡
  5. 测试与穿孔不显示什么不好之类的软件渲染四核心3.2gz等

下面是一些结果:

  • 100行×5周的cols:平滑滚动
  • 100,000行×5周的cols:平滑滚动
  • 100行×75个COLS:滚动性能很差
  • 1 00,000行×75列:完全冻结

当我有大量列(〜75-100)时,我该如何改进垂直滚动性能?

感谢

+0

75列是否有意义,即使它工作完美无瑕?我建议默认情况下只使用重要的列,并在网格侧面显示按字母顺序排列的可选列作为复选框,可以根据用户的要求显示。 – doblak 2012-07-07 23:16:14

回答

5

你缺少两个非常重要的特性:

同时启用它们,看看如果这有所作为。它应该有所帮助。

我有大约20左右的列约2500行,我没有看到性能问题,但它的75列绝对看起来像很多。您可能想要调查在标题中添加右键单击启用/禁用列(类似于excel)。

+0

谢谢。这两个属性帮助了很多。禁用virtualizingstackpanel并启用这两个属性会产生很大的差异。我现在可以管理75列x 10,000行。我的应用程序是一款类似于应用程序的应用程序,用户通常从总共300个列中选择75列至150列。它们将应用程序扩展到多个显示器。因此,这个例子实际上是一个真实的生活场景。此更改现在可用于最多90列。想知道是否有办法让它工作到150.谢谢你的帮助 – Rhino 2012-07-08 07:47:16

+0

@Rhino,我有同样的情况,你的意思是解决方法是EnableColumnVirtualization =“True”EnableRowVirtualization =“True”VirtualizingStackPanel.IsVirtualizing =“假“?在我的情况下,它几乎停止,非常缓慢的滚动 – 2012-10-19 11:48:12

+0

感谢@ daub815的回应,但你的意思是“关闭面板的堆栈面板虚拟化”?你的意思是改变itempanel到stackpanel期望的虚拟onr? – 2012-10-20 14:14:37