我有一個關於星火DataGrid的問題,以及如何在垃圾收集 方面的工作。什麼我發現是,如果我動態從DataGrid在運行時添加和刪除列 的GridColumns和itemRenderer的永遠不會釋放從內存 。星火Datagrid的內存使用情況
例如,如果我有一個包含10個項目的列表,並且我創建了10個列,則 是100個ItemRenderer和10個GridColumns。如果我刪除所有的列,他們仍然在那裏 。
如果我添加5列回來,它不會出現實例更GridColumns或 的itemRenderer - 仍有100個總渲染器以及內存10列。
這並不與MX DataGrid的發生。由於列被刪除的 渲染器和和DataGridColumns也會從內存中釋放,當我在 探查一下之後,我看到了0項渲染器和1周的DataGridColumn。
沒有任何人有什麼會被這裏發生了什麼想法?或者我只是 缺少什麼?
這裏是我用來測試的Spark DataGrid中的代碼:
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
<fx:Declarations>
<s:ArrayList id="dp">
<fx:Object label="label 1"/>
<fx:Object label="label 2"/>
<fx:Object label="label 3"/>
<fx:Object label="label 4"/>
<fx:Object label="label 5"/>
<fx:Object label="label 6"/>
<fx:Object label="label 7"/>
<fx:Object label="label 8"/>
<fx:Object label="label 9"/>
<fx:Object label="label 10"/>
</s:ArrayList>
<s:ArrayList id="columns">
<s:GridColumn dataField="label"/>
</s:ArrayList>
</fx:Declarations>
<s:layout>
<s:VerticalLayout/>
</s:layout>
<s:DataGrid dataProvider="{dp}" columns="{columns}" width="100%" height="100%"/>
<s:HGroup>
<s:Button label="Add Column" click="columns.addItem(new GridColumn('label'))"/>
<s:Button label="Remove Column" click="if(columns.length > 0) columns.removeItemAt(0)"/>
</s:HGroup>
</s:Application>
「如果我有一個包含10個項目的10個項目的列表,並且我創建了10個列,那麼將有100個ItemRenderer」;這隻有在您的DataGrid顯示10行時才爲true。你是DataGrid顯示5行;然後你有50個itemRenderer。[注意:我不確定Spark DataGrid是否創建了所有的像MX DataGrid一樣的列;如果沒有,你可能會有更少的渲染器;根據顯示的列數) – JeffryHouser 2011-06-04 17:09:00
+1,用於提供完整的可運行樣本。 – JeffryHouser 2011-06-04 17:10:25