У меня есть вопрос о Spark DataGrid и о том, как это работает с точки зрения сбора мусора . Я нахожу, что если я динамически добавляю и удаляю столбцы из DataGrid во время выполнения, GridColumns и ItemRenderers никогда не получат освобождение из памяти.Использование памяти Spark Datagrid с динамическими столбцами
Например, если у меня есть список из 10 предметов, и я создаю 10 столбцов, то будет be 100 ItemRenderers и 10 GridColumns. Если я удалю все столбцы, они все еще там.
Если я добавлю 5 столбцов назад, он не будет создавать экземпляры большего количества GridColumns или ItemRenderers - в памяти еще 100 рендерингов и 10 столбцов.
Это не происходит с MX DataGrid. Когда столбцы удаляются, ItemRenderers и DataGridColumns освобождаются из памяти, когда я смотрю на профилировщик , я вижу 0 ItemRenderers и 1 DataGridColumn.
Есть ли у кого-нибудь идеи о том, что здесь происходит? Или я просто что-то не хватает?
Вот код, который я использовал для тестирования Спарк 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 ItemRenderers», это верно, только если ваш DataGrid отображает 10 строк. вы DataGrid отображает 5 строк, тогда у вас есть 50 itemRenderers. [Примечание: я не уверен, что Spark DataGrid создает все co lumns сразу, как MX DataGrid; если это не так, у вас может быть меньше визуализаторов; на основе количества отображаемых столбцов) – JeffryHouser
+1 для обеспечения полного, запускаемого образца. – JeffryHouser