0

DataGrid でメモリ リークが発生していることに気付きました。アイテムを選択しない場合、dataGrid を GC できます。何かを選択すると、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 されます。選択したアイテムで DataGrid を GC する方法はありますか? フレックス 4.6.0 を使用しています

4

1 に答える 1

0

これはメモリリークではなく、ライブアイテムのサイクルです。

onCreationCompleteシーンでのデータグリッドのレンダリングと表示が終了すると呼び出されます。グリッド(selectedItemイベント)をクリックしてアイテムを追加する必要があります。

于 2012-09-13T05:51:41.290 に答える