ちょいとデバッグ用に使用メモリとFPSを表示する”debugger”クラスなるものを作ってみた。
で、色々試していると、FPSを算出するためにEvent.ENTER_FRAMEをまわしているだけでメモリが4KBぐらいずつ浪費されているっぽい。Event.ENTER_FRAMEのhandlerに渡されるeventをnullにしてみたりしたのだけど変わらない。
メモリ変移を描画するために(ダブルクリックでグラフ表示)時間を取得しているのだけど、それの桁が増えるからその分のメモリが浪費されているのかと思ったのだけど、どーもそうではないらしい。(メモリのチェックはTimerで行っている。)Event.ENTER_FRAMEのhandler内でフレームカウントさせている変数を変化させず、中を空にしていても増加していく。(微々たる量だけど)で、Event.ENTER_FRAMEをaddしなければ使用メモリは増加しない。(つまりメモリーチェックの方の関数系では特にメモリーは増加していないということになるかと・・。)
これはクリアできないものなのでしょうか??
以下ソース。
usage:
まぁ微小な量だけど気持ち悪い。
ちょっと作り直しました。
apeirophobia: img8.debug.Debuggerこちらです。
「Event.ENTER_FRAMEをしているだけでメモリが浪費される??」への2件の返信
1、ENTER_FRAMEイベントが起こる度にnew Event()されている。
2、GCはメモリが一定量に達しないと実行されない。
と言うわけでメモリが溜まっていっている。
これは言語仕様上(? リスナーの仕様上か?)仕方ないことかと思われます。
>knbさん
はぃ、そうなんです、一応理解はしているのですが、見てる感じGCはほぼ発動してないです・・。何かしら動いている間は発動無いんじゃないかというぐらい発動しませんw
localCnnection2回叩きをやれば発動しますが・・。(デバッガプレイヤーだとgcで発動できますが・・。)
で、腑に落ちないのがTimerではメモリが増加していかないってことなんですよね・・。なんでかなーと・・。target対象がdisplayObjectになってるから、その参照がメモリ増加の原因ですかねぇ・・・。ってことはshapeに対して適応すればメモリ増加を抑えられる・・?のかしら・・・。
ちょっとやってみよー。