0

我注意到 DataGrid 中的内存泄漏,如果我没有选择一个项目,我可以 GC 我的 dataGrid,如果选择了任何东西,那么 dataGrid 会导致内存泄漏......这是最简单的例子:

<?xml version="1.0" encoding="utf-8"?>
<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:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.collections.ArrayList;

            import spark.components.gridClasses.GridColumn;

            [Bindable]
            private var columns:ArrayList = new ArrayList;

            [Bindable]
            private var dataProvider:ArrayCollection = new ArrayCollection;

            private function onCreationComplete():void
            {
                dataProvider.addItem({id:1});

                var column:GridColumn = new GridColumn;
                column.dataField = id;
                columns.addItem(column);

                container.selectedIndex = 0;
            }

            private function gotoOne():void
            {
                currentState = one;
            }

            private function gotoTwo():void
            {
                columns = null;

                currentState = two;
            }
        ]]>
    </fx:Script>

    <s:states>
        <s:State name="one"/>
        <s:State name="two"/>
    </s:states>

    <s:Button click="gotoOne()" label="one"/>
    <s:Button click="gotoTwo()" label="two" left="150"/>

    <s:DataGrid id="container" top="30" includeIn="one" itemDestructionPolicy="auto"
                creationComplete="onCreationComplete()" columns="{columns}"
                dataProvider="{dataProvider}"/>
</s:Application>

如果您注释掉“container.selectedIndex = 0;”行 DataGrid 很好地进行了 GC。任何想法如何使用所选项目 GC DataGrid?我正在使用 flex 4.6.0

4

1 回答 1

0

这不是内存泄漏,而是活动项目的循环。

onCreationComplete当您在场景中完成渲染和显示数据网格时调用,您必须在单击网格(selectedItem事件)时添加项目。

于 2012-09-13T05:51:41.290 回答