摆脱不可见的UltraGridRow实例

时间:2012-03-01 10:21:37

标签: ultragrid

我的网格总共显示了数万行,显然用户只是在任何时间点查看这些行的一小部分,通常大约在10到20行之间。

我启用了 LoadOnDemand ,这确保了 UltraGridRow 实例和其他几个对象只有在移动到可见区域时才会创建:

grid.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;

这很好用(根据我的内存分析器),但是当我向上和向下滚动整个表时,即触发为所有行创建UltraGridRows,然后所有UltraGridRows都将被创建并永久保留在内存中。

我怎样才能(理想情况下自动地,但如果不是手动的话)从UltraGridRow对象中删除不在视图范围内的行? (或者只是摆脱所有UltraGridRows - 无论如何都会自动重新创建)

我发现的一种蛮力方式是:

var tmp = grid.DataSource;
grid.DataSource = null;
grid.DataSource = tmp;

虽然会引起一些副作用,还有其他方法可以摆脱UltraGridRows吗?

顺便说一下,我尝试了这两个人,没有成功(尝试 true false 用于bool params)。

grid.Rows.Refresh(RefreshRow.ReloadData, false, true);
grid.Rows.DeallocateCells(true);

我正在尝试降低内存消耗,UltraGridRows目前是主要消费者(UltraGridRows本身不是huuuge,它们每个消耗不到200字节,在我的情况下意味着几兆字节,所以你知道我们在谈论什么)。

这是Infragistics 9.2。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

嗯,总有反思......

var m = typeof(RowsCollection)
    .GetMethod("InternalClearHelper", BindingFlags.NonPublic | BindingFlags.Instance);
m.Invoke(grid.Rows, null);

这实际上对我有用,但它会清除选择,所以你必须记住之后再调用和恢复选择。