4

私のアプリケーションは、いくつかのグループを持つウィンドウを作成します。ウィンドウが閉じられると、ウィンドウとその子孫は GC によって収集されません。

Flash Builder Profiler は、イベント リスナーを見つけて削除するのに役立ちました。これは、 のライブラリ コードから追加されたイベント リスナーを示しているためですWindow.as

具体的には、ウィンドウを開く前とウィンドウを閉じた後の徘徊オブジェクトを比較し、MyWinクラス (1 つのインスタンス)を選択します。

MyPackageName.MyWin (10 パス)

10x 次の行:

関数 [savedThis] 569222 GCRoot:はい バイト:308

メソッドパネルの各「関数」をクリックすると、各「関数」の上部に次の 10 が表示されます。

spark.components:Window:creationCompleteHandler()    Window.as line 2610
spark.components:Window:creationCompleteHandler()    Window.as line 2613
spark.components:Window:creationCompleteHandler()    Window.as line 2616
spark.components:Window:creationCompleteHandler()    Window.as line 2619
spark.components:Window:creationCompleteHandler()    Window.as line 2625
spark.components:Window:creationCompleteHandler()    Window.as line 2639
spark.components:Window:creationCompleteHandler()    Window.as line 2636
Spark.components.supportClasses:SkinnableComponent:attachSkin() SkinnableComponent.as line 694
Spark.components:SkinnableContainer:partAdded()      SkinnableContainter.as line 959
Spark.components:SkinnableContainer:partAdded()      SkinnableContainter.as line 957

これらはすべて、何らかの方法で MyWin.initialize() から呼び出されます。

コードによって作成されたすべてのイベント リスナーを削除し、すべての遷移を削除しました。しかし、これの意味をまだ理解できず、ウィンドウをどのように処分できますか。私は数日間苦労しているので、どんな助けでも大歓迎です。

4

2 に答える 2

1
You can try to use 

    System.pauseForGCIfCollectionImminent(1)

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/system/System.html#pauseForGCIfCollectionImminent%28%29

or try to use 

    System.gc() 

in this way

   private var numCollected; uint = 0;

   private function gCollect(): void
   {
       addEventListeners(Event.ENTER_FRAME, onEFGCollect);
   }

   private function onEFGCollect(event: Event): void
   {
     numCollected++;
     System.gc();
     if(numCollected > 2)
         removeEventListeners(Event.ENTER_FRAME, onEFGCollect);
   }

オブジェクトを収集するには、それらすべてを収集済みとしてマークする必要があるため、System.gc() を別々のフレームで 2 回使用します。その後、System.gc() はオブジェクトを収集できます。

于 2013-07-08T09:58:45.257 に答える
0

私の知る限り、問題のウィンドウへのすべての参照が null に設定されていることを確認するのが最善の方法です。以前にこれを調べたことがありますが、ガベージコレクターをすぐに機能させる直接的な方法は見つかりませんでした。

于 2012-11-06T10:50:54.107 に答える