メモリリーク対策で効果的なもの

Flash Builderのプロファイラを解析すればわかるのですが、メモリ使用量の大半はBitmapDataクラスやMovieClipクラス、Textureクラスなどの表示に関わるオブジェクトです。表示に関するオブジェクトの参照が残っていると、メモリ使用量が増えやすいので、それらの参照を断ち切ることを優先するといいでしょう。

他にもLoaderクラスやURLLoaderクラスで読み込んだ外部SWFXMLByteArrayなどもメモリにたまりやすいのでこまめに処理を確認するといいでしょう。

イベントの解除 removeEventListerner() は必須

イベントの登録解除漏れはほぼ確実にメモリリークが発生します。addEventListener()メソッドで登録したものはremoveEventListener()メソッドを使って解除しましょう。ちなみに弱参照を使ってもいいかもしれませんが、明示的に解放するほうが確実であると考えているので、私は弱参照は使っていません。

静的変数は特に注意が必要

静的変数やDictionaryクラスは特に消し忘れてしまいメモリリークすることが多いので、注意が必要です。メンバー変数より静的変数は残っているかどうかを追いにくいので、メモリリークの調査をしていると苦労します。

配列内の要素もdispose()可能ならdispose()する

配列内の要素は、全要素に対してdispose()を実行し(必要であればイベント解除もし)、最後に配列の変数にnullを代入します。

for(var i=0; i < arr.length; i++){
  arr[i].dispose();
}
arr = null;

まとめ

最近はスマホアプリでAdobe AIRの魅力が再認識され採用事例が増えているので、メモリリーク対策はますます重要になってくるはずです。今回紹介した手法は入門ですが、実践的な手法をこの当サイトで今後紹介していければと思います。

今年も残り僅かとなりましたが、Adobe AIRアドベントカレンダーのほうもよろしくお願いします。