私の基本的な質問:メモリ リークが System.totalMemory によって報告されないことがありますか?
更新: パフォーマンスの問題の原因が完全に検証されたことはありませんでしたが、ターゲット システムで簡単に測定できなかった GPU/CPU の問題 (@divillysausages の仮説による) に関係している可能性があります。この質問をした日のうちに奇妙で古典的な奇妙なバグが発生し、問題は解決されたようです。この Q&A の目的上、System.totalMemory は正確に報告されていると言っても過言ではないと思います。
バックグラウンド:3 つのフルスクリーン Adobe Air 3 アプリを開発しています。これら 3 つのアプリと 3 つの VLC プレーヤーは、マルチスクリーンの Windows 7 マシンで常に実行されています。各 AIR アプリは、6 つの 1080p 画面のいずれかで全画面表示されます。AIR アプリは、Robotlegs 1.5.2 (Lazy Mediation を使用)、AS3 Signals (Relaxed Signals を使用)、および共通の側面 (ロガー、ローダー、基本 UI、スケジューリング サービス、構成パーサー) を実装する独自のボイラープレート シェルを使用します。シェルのストレステストを入念に行ってきましたが、良さそうです。3 つのアプリはすべて、一定の間隔 (約 5 分) でデータを読み込み、ビューを更新します。また、自動化されたストレス テストでは、ローダーとパーサーが、更新が集中している場合でもメモリ セーフであることを示しています。初期化後に作成されるオブジェクトはほとんどありません。
問題:ターゲット システムで数時間実行した後、アニメーションの重いモジュールのレンダリング レートが低下します。
この問題は明らかに階層化されていますが、私は Flash Builder プロファイラーと Mr Doobs Stats ツールを使用してプロファイリングを行っているので、少し不満です。FB プロファイラの文字列に関する私の他の質問を参照してください)。アニメーションを多用するアプリを起動すると、すぐにメモリ使用量のレベルに達し、アニメーションのパフォーマンスは依然として良好ですが、数時間後に再度チェックすると、アニメーションが途切れ途切れになり、不規則になり、アプリの UI が遅く応答しなくなります。他の 2 つのアプリ (低フレーム レートで実行されており、アニメーションはありません) はかなり良いように見えますが、それぞれ同じくらい多くのメモリを消費します。アニメーション アプリを再起動すると問題が解決します。
さらにコンテキスト:
アニメーションを多用するアプリは、アニメーション化されているかどうかに応じて、stage.frameRate を 15 から 40 の間で調整します。ある種のデータ処理の大洪水の最中にアニメーションが開始したいという競合状態を防ぎ始めました...一定のフレームを使用することを検討していますが、それはロングショットのようです
アニメーションに Greensock の TweenMax を使用し、最初にメモリ リークを発見しました (これは私自身の不適切な実装のケースです)。
新しいオブジェクト (基本的に、イベント リスナーを持たず、値が上書きされることが多い値オブジェクト) の作成はほとんどありません — 表示オブジェクトが周期的に作成/破棄されることはありません
可能な限りイベントの代わりにシグナルとコールバックを使用する
Timer オブジェクトを可能な限り共有および再利用し、数秒のタイミングでそれらをより多く使用することにより、最小量の Timer インスタンス (5 ~ 6)
renderMode "auto" Adobe AIR の使用: メイン ウィンドウのプロパティ— Windows 7 マシンに展開するためにこれを変更する必要があるかどうかわからない