4

Adobe Air とその HTML API を使用して小さなデスクトップ アプリを開発しています。アプリには 2 つのウィンドウがあり、1 つはローカル マシンのフォルダーにある画像のスライドショーを表示し、もう 1 つはそれらの画像 (1 つの大きな画像と前へ/次へのボタン) を参照できるようにします。

最初に簡単なテストのために、フォルダーからすべての画像を各ウィンドウの DOM にロードしました。DSLR からの高解像度 JPEG であるため、画像が多すぎる (150 以上) まで問題なく動作します。明らかに、各画像は多くのメモリを消費しており、おそらくオーバーリークからアプリを殺してしまいます. そこで、ブラウジング ウィンドウを最適化することから始めました。すべてを読み込むのではなく、1 つのタグだけを使用して .src 値を JavaScript に置き換えました。しかし、この手法は問題を遅らせているだけです。すべての画像を閲覧し続けると、メモリ使用量がどんどん増えていくからです。イメージの src を置き換えても、以前のイメージで使用されていたメモリは解放されません。DOM から画像を削除して再作成しようとしても同じです。

私が持っているアイデアですが、あまり好きではありませんが、別の HTML ファイルをロードしてフレーム内に画像を表示し、画像 src をパラメータとして渡すことです。次に、フレーム全体をリロードします。うまくいけば、メモリ使用量をリセットできます。まだ試していません。

誰でもこれを処理する方法を知っていますか?

4

1 に答える 1

0

これは、Adobe Air アプリケーションを最適化するための優れたツールです。アドビエア チューナー:

私はあなたのプロジェクトに詳しくありません。またはそれがどのように実装されているか。Adobe AIR には、メモリを解放するためにアクセスできるメソッドがいくつかあります。これにより、オブジェクトを正しく削除または破棄できます。これらのクリーンアップはここにあります。

メディア プレーヤーを作成するときに一部の人が行うことの 1 つです。特に大きなメディアを持つもの。例:

メディア プレーヤーに 6 ページのコンテンツが含まれているとします。合計1GBの合計データ。これは、プロジェクトにとって非常に大きなメモリ割り当てです。そのため、1GB 全体を一度に呼び出すのではなく、最初のページが読み込まれ、2 番目のページが読み込まれます。

他の 4 つのページは「呼び出されていない」ままで、動的にロードされません。次に、ユーザーはページ 2 に切り替えます。3 ページ目で、コンテンツのプリロードが開始されます。ユーザーは 3 ページに切り替えます。4 ページ目の読み込みが開始されます。ただし、ページ 1 で作成された配列またはオブジェクトも破棄されます。この方法では、アプリケーションには影響しません。

ロードのすべての側面を制御するため、明らかにこの方法は面倒です。また、ユーザーがページをすばやく移動し始めると、問題が発生します。

したがって、別の可能な解決策です。サイズが大幅に小さくなるようにサムネイルを作成することになります。次に、フルサイズの画像をスタンド アロン ストリームとしてロードします。このストリームは、その領域を離れたら問題なく破棄できます。そうすれば、ギャラリーはそれから独立しています。

いくつかのコードまたは追加の詳細を提供していただければ、実装のインターフェース/メモリの提案だけでなく、それ以上にお手伝いできる可能性があります。

于 2012-11-30T20:12:54.920 に答える