2010年12月20日月曜日

Tweenの高速化についてまとめ。その2

前回はリンクリストの手法について書いたけど、次は使用メモリについて。

アニメーションを高速化させる上で、高速化の邪魔となるのがGCだったりする。GCによって、非到達オブジェクトのマーキング、マークされたオブジェクトの破棄、領域のデフラグメントなどが行われる。60fpsのアニメーションの途中でGCが発生すると、60fpsを一瞬切ることもあり、体感としても一瞬詰まる感じもする。

次に試してみて欲しいのが以下のコードである。

プロパティの設定方法によって、メモリの利用量が変わる件のテスト - wonderfl build flash online


どう見ても同じオブジェクトの同じプロパティにNumberの値を代入しているだけでも、プロパティが静的に解決できているケース以外、代入するたびにメモリーが増えているのだ。これは不可解である。ちなみに代入する値がStringだと発生しない。また、プロパティが静的に解決できるケースにおいても全く増えない訳ではないが、微々たるものである。

仮に10000パーティクルを動かすとすると、毎フレームごとに数十から数百KBytesずつ消費され、1秒間だけでもあっという間に数十MBytes消費してしまう。実際にはリークしているわけではないので、GCされるが、当然重くなる。

今作成中のアニメーションのライブラリについては、動的な型と名前から、静的なプロパティへの代入処理にマッピングしなおすことによって、代入時のメモリ増を押さえてある。

0 件のコメント:

コメントを投稿