我有一个关于星火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