我有一个总共显示数万行的网格,显然用户在任何时间点只查看这些行的一小部分,通常在 10~20 行左右。
我启用了 LoadOnDemand,它确保UltraGridRow实例和其他几个对象只有在它们移动到可见区域时才会被创建:
grid.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;
这很好用(根据我的内存分析器),但是当我向上和向下滚动整个表时,即触发为所有行创建 UltraGridRows 时,所有 UltraGridRows 都将被创建并永远留在内存中。
我怎样才能(最好是自动,但如果不是手动)摆脱视野之外的行的 UltraGridRow 对象?(或者只是摆脱所有 UltraGridRows - 无论如何它们都会自动重新创建)
我想出的一种蛮力方法是:
var tmp = grid.DataSource;
grid.DataSource = null;
grid.DataSource = tmp;
虽然它会导致一些副作用,那么还有其他方法可以摆脱 UltraGridRows 吗?
顺便说一句,我尝试了这两个人,但没有成功(为 bool 参数尝试true和false )。
grid.Rows.Refresh(RefreshRow.ReloadData, false, true);
grid.Rows.DeallocateCells(true);
我正在尝试降低内存消耗,而 UltraGridRows 目前是主要消费者(UltraGridRows 本身并不是 huuuge,它们每个消耗不到 200 字节,在我的情况下这意味着几兆字节,所以你知道我们是什么谈论)。
这是基础设施 9.2。
有任何想法吗?