2011-10-18 16 views
0

私は、ビットマップデータ、bytearrays、およびbase64文字列を多く使用するFlash CS5でAdobe AIRデスクトップアプリケーションを構築しています。しばらくすると、アプリケーションのメモリ使用量が倍増します。Adob​​e AIR - ガベージコレクションとsystem.gc()

system.gc()を使用してその時点でメモリを解放することをお勧めしますか、それとも悪い習慣ですか?

ありがとうございました。

答えて

3

system.gcは、AIRおよびFlash Playerのデバッグ専用機能です。私はあなたがgcを避けることができればbitmapdataと他のオブジェクトをリサイクルすることが良いと思います。そして、それらを使用するとすぐにbitmapdata.dispose()とbitmapdata = nullを呼び出しません。

プロジェクトで同じサイズのビットマップオブジェクトをさまざまな時間に使用している場合は、BitmapDataの同じインスタンスを使用してそれらを操作できます。これはItemRenderersがアイテムをリサイクルする方法、またはiOSのUITableViewControllerなどの他のプラットフォームでもUITableViewCellをリサイクル/再利用する方法と似ています。ガベージコレクションは万能薬ではなく、簡単なプログラマビリティが性能よりも重要な場合に使用してください。

+0

** recyle ** bitmapdataと他のオブジェクトの意味をもう少し説明してください。 – Tom

+0

デバッグのみの場合は、たとえば、デスクトップ用にインストールされたAdobe AIRアプリなどではわかりません。システムドキュメントから: "またはインストールされているアプリケーションで" "Flash PlayerのデバッガバージョンとAIRアプリケーションのみAIRアプリケーションでは、System.gc()メソッドはAIRで実行されているコンテンツでのみ有効ですデバッグランチャー(ADL)、またはインストールされているアプリケーションでは、アプリケーションセキュリティサンドボックスのコンテンツに含まれます。 – Aaron

1

system.gcは、Flashランタイムによってアイドルサイクルで自動的に呼び出されるため、呼び出す必要はありません。あなたがそれを自分で呼び出すと、実際の利益のためにあなたのアプリケーションを遅くするかもしれません。

BitmapDataまたはByteArrayが不要な場合は、BitmapData.dispose()またはByteArray.clear()を呼び出してください。