【问题标题】:WPF DataGrid performance and selective renderingWPF DataGrid 性能和选择性呈现
【发布时间】:2011-03-25 14:32:01
【问题描述】:

我正在将 DataGrid 绑定到动态 DataSet(db 表查找数据)

这在大多数情况下都可以正常工作,当列存储大量信息集时接受。一个这样的例子是存储相当大的 XML 配置数据 sn-p 的 XML 类型列。

在这种情况下,即使列宽/高被限制为仅显示该单元格中数据的前 300 个字符,网格也会变慢。

所以看起来网格呈现了单元格中的所有数据,而不仅仅是可见部分。

有没有办法将 DataGrid 配置为仅以通用方式呈现此类单元格的子部分(因为我无法预料哪些列需要这个)?

【问题讨论】:

    标签: .net wpf performance datagrid dataset


    【解决方案1】:

    这可能是不相关的,但我在 DataGrid 中遇到了各种问题,其中在调整窗口大小、列排序等之后需要几秒钟才能刷新,并且在这样做时锁定了窗口 UI(1000 行, 5 列)。

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

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

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

    【讨论】:

      【解决方案2】:

      尝试将单元格的内容包装在 ScrollViewer 或启用虚拟化但禁用滚动条的东西中。

      另一种方法是只返回数据源的前 300 个字符

      【讨论】:

      • @Sonic Soul 你确定是渲染导致了问题,而不是数据库调用?
      • 是的,我确定。当该列被填充时,整个网格都是昏昏欲睡的。数据检索期间不是缓慢的。
      猜你喜欢
      • 1970-01-01
      • 2012-06-23
      • 2013-11-24
      • 1970-01-01
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多