前回に引き続き Optimizing Performance for the Flash Platform からメモリ使用の最適化に関する Tips です。
ビットマップのダウンサンプリング
- Windows Moblie 向けの Flash Player 10.1 では 32-bit イメージを 16-bit イメージにダウンサンプリングすることにより使用するメモリ量を半分にする
- 透明な部分を持つイメージに対してはダウンサンプリングが行われない
BitmapData の単一参照機能
- Flash Player 10.1 では、埋め込まれたイメージから BitmapData インスタンスを作成すると、常に単一のインスタンスを参照する
- 既存のコンテンツも再コンパイル無しで Flash Player 10.1 上で実行するだけでこの機能が利用できる
- 従来の Flash Player では BitmapData のインスタンスを生成した数だけ、実際にインスタンスがメモリ上に生成されていた
フィルターの使用
- フィルターを Sprite などに利用すると、2 つのビットマップが生成される (Sprite をビットマップ化したものと、フィルター適用後のビットマップ)
- 2 つのビットマップのうち表示に使用されるのはフィルター適用後のビットマップのみ
- Flash Player 10.1 はフィルターが 30 秒以上変更されないか、表示されなくなると、元のビットマップ (フィルターの適用されていない方) を開放する
- 解放後にフィルターが変更されると、元のビットマップがサイド生成される (動的ビットマップアンロード)
- Flash Player 10.1 で改善されてはいるが、フィルターの使用は負荷が高い
- 動的にフィルターを適用することが不要な場合には、Photoshop 等で作成した画像を読み込む方がよい
ダイレクトミップマッピング
ミップマッピングについては別記事を参照
- Flash Player 10.1 は元のサイズから目的のサイズへ直接マップできる (中間サイズのイメージ作成が不要)
- 動的ビットマップアンロードと共存、元のデータをメモリ上から開放し必要に応じて再読み込みしたり、メモリ上にある中間サイズのイメージから必要なサイズのイメージを生成することが可能
- JPEG もいったん展開することなく、直接ミップマッピングが可能
3D エフェクト
- Flash Player 10 から導入された 3D 機能 (rotationX 属性, drawTriangles メソッド, z 属性など) を使うと対象のオブジェクトのビットマップが生成されメモリを消費する
- 3D 変換を行うと、元の状態のビットマップと変換後のビットマップの 2 つのビットマップが作られるため、よりメモリ使用量が増える
テキスト
- Flash Player 10 から導入された新しいテキストエンジン (FTE) はメモリ効率に優れている
- 表示用の文字については FTE を使用したほうが少ないメモリ消費でよりきれいな表示ができる
- 入力文字は、従来の TextField オブジェクトを使った方が、一般的には少ない ActionScript のコードで処理ができ効率がよい
イベントとコールバック
- イベントを使用すると多くのオブジェクトを生成することでより多くのメモリを消費することがある
- 例えば、Event.ENTER_FRAME イベントに対するリスナーを設定すると、フレームごとにイベントオブジェクトが生成される
- 複雑な構造のディスプレイリストでは、イベントバブリングによる負荷も高くなる
- イベントの代わりにコールバックを使用したほうがメモリの使用効率がよい
private function doSomething(callback:Function):void { // 引数として渡された関数を呼び出す callback(); }
コメントする