2012-03-01 61 views
0

我有一個網格,總共顯示成千上萬的行,顯然用戶只是在任何時間點看這些行的一小部分,一般在10〜20左右行。擺脫不可見的UltraGridRow實例

我啓用LoadOnDemand,從而確保UltraGridRow實例和其他幾個對象纔會被創建時移動到可見區域:

grid.DisplayLayout.LoadStyle = LoadStyle.LoadOnDemand; 

這個偉大的工程(根據我的記憶profiler),但是當我上下滾動整個表格時,即觸發所有行的UltraGridRows的創建,那麼所有的UltraGridRows將被創建並永遠留在內存中。

我該如何(理想情況下自動,但如果沒有,手動)擺脫UltraGridRow對象的視圖行不可見? (或只是擺脫所有UltraGridRows的 - 反正自動他們會重新創建)

一種強制方法我想通了,是這樣的:

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

它會導致一些副作用的,所以有一些其他擺脫UltraGridRows的方法?

順便說一句,我想這兩個傢伙,但沒有成功(試圖爲布爾PARAMS)。

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

我試圖讓內存消耗下降,UltraGridRows是目前主要的消費(自己UltraGridRows不huuuge,他們消耗下每200個字節,這在我的情況,是指一對夫婦兆的,只是讓你知道我們在說什麼)。

這是Infragistics 9.2。

任何想法?

回答

0

嘛,總是有反射...

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

這實際上對我的作品,但它會清除選擇,所以你必須要記住,在調用之前,之後恢復的選擇。