【问题标题】:Infragistics Ultragrid - slow performance with PerformAutoResizeInfragistics Ultragrid - 使用 PerformAutoResize 降低性能
【发布时间】:2014-05-21 17:16:02
【问题描述】:

我使用 Ultragrid 的代码性能很差,但在跟踪输出上使用 D3.js 运行可视化分析我发现 grid__InitializeRow 多次调用自身。

触发器创建者:this.grid.InitializeRow += new Infragistics.Win.UltraWinGrid.InitializeRowEventHandler(this.grid_InitializeRow);

问题从这段代码开始:

column.PerformAutoResize(PerformAutoSizeType.AllRowsInBand, true)

在网上搜索我找不到这方面的信息,但找到了一些可能的竞争者 - 调用其中任何一个似乎调用初始化行:

  • grid.DataSource
  • grid.Rows.Band.Layout.Bands
  • column.performAutoResize

问题

  1. 在任何地方都有这方面的文档
  2. 我可以暂时禁用触发器吗

提前致谢

【问题讨论】:

  • InitializeRow 每次重绘网格时都会调用。当您刷新网格、添加新数据源、排序等时会发生这种情况。您可以使用 public void grid_InitializeRow(Object sender, Infragistics.Win.UltraWinGrid.InitializeRowEventArgs e) 添加/删除额外功能

标签: c# ultrawingrid


【解决方案1】:

我无法让“PerformAutoResize”充分发挥作用。这将需要 10 秒。所以最后我决定自己动手,这仅限于我们对网格配置的特殊使用,它只在单元格(而不是子控件)中显示文本,对每个网格单元格使用 Graphics.MeasureString 函数。

大约 40 行代码,600 x 20 网格所需的时间减少到 0.4 秒。

【讨论】:

  • 我发现它触发了一系列更新 - 认为你做对了。
【解决方案2】:

通过Infragistics forums找到答案:

调用column.PerformAutoResize(PerformAutoSizeType.AllRowsInBand, true) 会触发来自数据源的重新绑定,进而触发initialise_row

由于多次调用调整大小(每列每条带一次),重新绑定失控了。

关于信息,我们还遇到了以下问题。使用一年的数据渲染需要 2 分钟:

  • 这是一个巨大的网格,并且单元格被单独设置样式。更改为使用外观库/工厂将加载时间缩短了 40 秒
  • 数据库调优又缩短了 40 秒
  • 更改自定义总计行的计算方式缩短了 15 秒(通过使用 total var 而不是更新单元格)
  • AutoResize 是一个力量倍增器 - 使所有其他问题变得更糟。解决这个问题可以节省更多时间。

希望这可以帮助其他有类似问题的人

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-26
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多