SIHOのプログラミングわーくワク
興味の赴くままに勉強してたら、読み書きできる言語は9個になりました。他にもいくつか気になる言語があったりなかったり? まだまだ続く、楽しいお仕事わーくワク♪
メモリーリーク回避についての参考リンク
2009.11.28 (Sat)
papervision3Dでコンテンツを作っていると、きっちりオブジェクト&イベントリスナーを削除してあげないと、すーぐに激重になってしまうのですね。それを回避すべく調べたので、参考にしたページをまとめておきます。
ちなみに、私はPlaneをMovieMaterialとBitmapAssetMaterialとBitmapFileMaterialで使っていたのだけども、BitmapAssetMaterialをdispose()すると、次からは表示されなくなってしまうので、何度も出したり消したりするときは、dispose()は使わないほうがいいみたい。
あと、外部XMLで指定のある画像を読み込んで表示するとき、BitmapFileMaterialを使うとぱらぱらというテンポで順に表示されるので、MovieClipの中のLoaderオブジェクトに一度画像を読み込んでからMovieMaterialをPlaneインスタンスに適用させて使いました。こちらのほうが処理的にはすばやく表示されました。
■AS3で陥りがちなメモリーリーク
http://as3s.org/2008/01/as3/
AS3ではガベージコレクションによるメモリ管理が導入されています。
ガベージコレクションとは、簡単に言えば「どこからも参照されなくなったオブジェクトがころあいを見計らって勝手にメモリから消去される」仕組みです。
この「どこからも参照されなくなった」という条件がクセモノで、気をつけないとすぐにメモリーリークの原因になります。
■ActionScript3.0 | メモリの解放
http://wakaz.info/2008/12/actionscript30_1.html
removeChildしただけだと、画面に映らなくなるだけで、消えてはいないみたい。
そこで、nullを代入することで、全て消えるっぽい。
その他、BitmapDataの時は、dipose();を使ったり、…
■MovieAssetMaterial・BitmapAssetMaterial でメモリーリーク
http://actionscript-junky.net/p_blog/category.php?k=papervision3d
※この方は、MOvieMaterialにして回避したそう。そういうやり方もあるのね。とメモ。、asset系のmaterialを適用してフレームを回しているとメモリーリークが起こるようです。
ソースを探ってみると内部で使用回数とmovieClipへの参照を保持している模様。そしてそれを解放する手段が用意されていない
■Papervision3D 2.0 GreatWhiteでメモリ解放
http://pecoco.jp/blog/?p=18
(1)○○○○Material.destroy()メソッドを使う
(2)一度テクスチャ用にBitmapDataインスタンスを作って、BitmapMaterialを利用
(3)未検証だけど、○○○○Material.bitmapを直接dispose()するとか