合計で数万行を表示するグリッドがあります。明らかに、ユーザーはいつでもそれらの行のごく一部、通常は約 10 ~ 20 行しか見ていません。
LoadOnDemandを有効にしました。これにより、UltraGridRowインスタンスと他のいくつかのオブジェクトは、可視領域に移動したときにのみ作成されます。
grid.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand;
これは (私のメモリ プロファイラーによると) うまく機能しますが、テーブル全体を上下にスクロールすると、つまり、すべての行に対して UltraGridRows の作成をトリガーすると、すべての UltraGridRows が作成され、永久にメモリに残ります。
どうすれば (理想的には自動的に、そうでない場合は手動で)、表示されていない行の UltraGridRow オブジェクトを取り除くことができますか? (または、すべての UltraGridRows を取り除くだけで、いずれにせよ自動的に再作成されます)
私が考え出した1つの力ずくの方法はこれです:
var tmp = grid.DataSource;
grid.DataSource = null;
grid.DataSource = tmp;
ただし、いくつかの副作用が発生するため、UltraGridRows を取り除く他の方法はありますか?
ところで、私はこれら2人の男を試しましたが、成功しませんでした( boolパラメータに対してtrueとfalseを試しました)。
grid.Rows.Refresh(RefreshRow.ReloadData, false, true);
grid.Rows.DeallocateCells(true);
私はメモリ消費を抑えようとしていますが、現在 UltraGridRows が主な消費者です (UltraGridRows 自体は巨大ではなく、それぞれ 200 バイト未満しか消費しません。私の場合は数メガバイトを意味します。について話す)。
これは Infragistics 9.2 です。
何か案は?