Flashでメモリを解放する最も良い方法は何ですか?それはガベージコレクタを持っていますか?そのGCを呼び出す方法は?オブジェクトをガベージコレクションに適用する方法Flex/Flashはどのようにメモリを解放しますか?
私は多くのチャートを表示するウェブサイトを持っています。私は、これらのグラフを表示している間にIEが使用するメモリが増加し続け、時には約500 Mbに達することが観察されます。私はいつも未使用のオブジェクトをNULLに再初期化します。
Flashでメモリを解放する最も良い方法は何ですか?それはガベージコレクタを持っていますか?そのGCを呼び出す方法は?オブジェクトをガベージコレクションに適用する方法Flex/Flashはどのようにメモリを解放しますか?
私は多くのチャートを表示するウェブサイトを持っています。私は、これらのグラフを表示している間にIEが使用するメモリが増加し続け、時には約500 Mbに達することが観察されます。私はいつも未使用のオブジェクトをNULLに再初期化します。
AS3にはGCが組み込まれています。
http://www.gskinner.com/blog/archives/2006/06/as3_resource_ma.html
あなたは、ガベージコレクションがどのように動作するかの感触を取得するには、Flexプロファイラー(フレックスプロのみ)を使用することができます。おそらく、それがどのように動作するかで最高のリソースは、件名にグラントスキナーの記事です。プロファイラは現在どのオブジェクトがメモリ内にあるのかを表示し、ボタンをクリックするだけでガベージコレクションを強制するオプションがあり、指定した時間にガベージコレクションの対象となるオブジェクトを簡単に特定できます。
あなたが与えることができるヒントの1つは、WebServiceを呼び出していくつかの静的データを取得し、そのイベントリスナーが処理された後にResultEventリスナーを使用する場合など、 removeEventListenerを呼び出して、使用しているメモリを解放します。メモリ使用を処理するためのヒントがいくつもあります。
オブジェクト参照をNULLに設定するだけでは必ずしも十分ではありません。そのオブジェクトを参照するイベントリスナーを作成した場合(またはそのオブジェクト自体がリスナーとして登録されている場合)、依然としてどこかで参照されます。
リスナーのような問題を回避する1つの方法は、弱い参照を使用することです。 addEventListenerは、弱参照を使用するように指示するオプションの引数をとります。これにより、弱参照イベントリスナー(または他の弱参照)以外で参照されていないオブジェクトはガベージコレクションされます。
多くの場合、ヒープからFlexオブジェクトを解放できますが、Flash VMはそのメモリをOSに戻しません。したがって、あなたは "plateu"というメモリにコードを書く必要があります。
http://www.craftymind.com/2008/04/09/kick-starting-the-garbage-collector-in-actionscript-3-with-air/
+1弱い参照の場合。私の経験は、あなたが実際に強い参照を必要とするケースはほとんどないということでした。 –
弱い参照は、気をつけなければ奇妙なことがあります。弱い参照や匿名関数には問題があります。ここにいる誰かが、それ以前にそれに関連する問題を抱えていました。 – Herms