非常に大規模なコードベースをコンパイルし、FlasCCで実行を開始しています。.swfを開くだけで、プレーヤーのメモリ使用量は最大300MBになります。C ++コードで使用可能な動的に割り当てられたメモリがまだ約300MBあるように見えるので、多かれ少なかれ問題ありません。
スレッドを作成すると問題が始まります。ドキュメントによると、すべてのスレッドが.swfをメモリにコピーし、サンドボックスで実行されます。これは、すべてのpthreadが、プレーヤーが.swfを開くために使用したのと同じ約300MBのメモリを消費することを意味しますか?
そのようです。pthreadを生成し、メモリ使用量をダンプする簡単なテストを実行しました(flash.system.Systemが報告する内容とCModule.ram.length)。ログは次のとおりです。
Starting 10 threads.
Memory usage: total=288MB private=335MB free=2MB CModule=33MB
Thread 0 started.
Memory usage: total=683MB private=732MB free=1MB CModule=36MB
Thread 1 started.
Memory usage: total=1071MB private=1121MB free=1MB CModule=37MB
Thread 2 started.
Memory usage: total=1459MB private=1510MB free=1MB CModule=38MB
その時点で、plash_player_debuggerはエラーメッセージなしで終了(クラッシュ)しました。
これは基本的に私たちにとってスレッド化がないことを意味します。2つのpthreadを開始した後、C++コードで使用できるメモリは最大50MBしか残っていません。
Adobe Scoutは、メモリ使用量のもう少し深い内訳を提供します。.swfが2つのバックグラウンドスレッドで実行されている場合のレポートは次のとおりです:(アドビフォーラムの同じ質問からの写真)
「その他」のブロックは、これら2つのアイドル状態のpthreadを生成した後、11MBから800MBに膨らみました。記憶は「他のプレイヤー」と「未分類」に入っていました。
したがって、主な質問は、これを回避する方法です。たぶん、AS3ワーカーがより少ないメモリを消費するようにする方法はありますか?