2011-12-15 10 views
1

メモリを扱うための具体的な戦略があるかどうか、特にWindows Phoneでのイメージキャッシュに関することを知りたいと思います。私はそれがインターネットから取得し、自由にローミングできる必要があるグラフィックスを保つ必要がある非常にグラフィックス集約的な銀色のアプリケーションを持っている - しかし、メモリ要件は数分のためにアプリを使用した後にかなり巨大になります。Windows Phone 7のメモリ管理

イメージのUriSourceをnullに設定しようとしましたが、ページに戻ったときにイメージの背景を維持する必要があります。インターネットにはあまり情報がないので、私は迷っています。作り付けのプロファイリングで私は "Texture Memory Dominant"を見せて、ヒープメモリを分析して問題を解決するように依頼しましたが、私はまだこれらのことについて全く知らないです。

今後進むための指針はありますか?

+0

コードを表示してください。 –

+0

これはアプリの中にあります。特に何もありません。誰かが高いメモリ使用量に対処する戦略を持っているなら、私はちょうど興味があった –

+0

完全に任意の問題については?私の解決策は、通常、コード内の血まみれの問題を解決することです。 –

答えて

1

あなたの質問と同様に私の答えは一般的です。私はあなたが問題が画像にあることを確かに知っていると推測します。 (数百のテキストアイテムを含む単純なListBoxは、多くのMBを要するため、

ウェブを検索すると、this oneなどのリンクが多数見つかります。しかし、一般的な分析は簡単です。

WP7画面サイズ(480x800)の画像を撮影します。 32ビットのビットマップ(これは、WP7が画像を開いたときに使用するものと思われます)は、およそ1.5 MB(単純な乗算)です。

同じjpgファイルは、(高品質の圧縮のために)10倍小さいサイズを持つことができます。

今、あなたは建設

<image source="http://..."/>. 

を使用舞台裏で行われているもの(あなたからの任意の情報がない場合には、これは私はあなたが使用したとするものである。)

WP7は、画像をダウンロードし、それをキャッシュに追加します。キャッシュは、画像を指し示すUriの使用を明らかにトレースします。

次に、イメージが開かれます。つまり、ネイティブイメージサイズのビットマップに変換されます。画像がこのプロセスでダウンサンプリングされるのは、maxを超える場合です。 WP7テクスチャサイズ。

hereのようにビットマップサイズをカスタマイズできます。あなたが品質を気にしているなら、2倍、4倍、または8倍の倍率を使うべきです.JPGの場合、これらの要因ははるかに速い選択肢です。 (画像がImageコントロールに読み込まれる前に画像の解像度が分かっているのかどうかはわかりませんが、jpgファイルからこの情報を取得するのは難しくありませんが、今は簡単にどうしたらいいのかわかりません

ビットマップは、コントロールのソースがnullに設定されている場合は(私の推測)、解放されます。 Uriがnullに設定されている場合、ダウンロードされたイメージはキャッシュからパージされます。

この情報をすべて借りれば、イメージキャッシュの使用を(ある種の)制御できるはずです。おおまかにイメージサイズを見積もり、どのイメージがキャッシュに残っているかを判断できます。たぶんUriオブジェクトをあなた自身の構造に格納し、必要に応じてそれらを解放するといったいくつかのトリックが必要になるかもしれません。私はこれが簡単だと言っているわけではありませんが、確かに可能です。

+0

私は気づいていない一般的な戦略があるかどうかを確かめるために、私はそれをそこに置いていました。ありがとう。 –

+0

ページの移動の間にイメージをパージした場合、バックキーのイベントでイメージをリロードするにはどうすればよいでしょうか? –

+0

イメージコントロールがそれらをリロードします。 –

関連する問題