0

背景: 私はいくつかの低解像度のサムネイル (100 x 150 のものもあれば、少し大きくて小さいものもあります) を表示するページを持つアプリを持っています。ユーザーが画像をタップすると、「ImageViewer」と呼ばれる別のページに移動します (画像名をグローバル文字列に保存し、その文字列を使用して画像のソースを完成させます)。このページにはフル解像度の画像が表示され、ズーム オプションがあります。

問題: 3 ~ 5 個のフル解像度の画像がレンダリングされると (これらの画像は約 38 MP です)、ユーザーが表示後にタップして戻っても、アプリは「System.OutOfMemoryException」でクラッシュします。

これらの画像が非常に大きいことは理解していますが、戻るボタンを押した後にメモリから「削除」する方法はありますか? 戻るボタンを押したときに画像ソースを 1 x 1 の画像に変更しようとしましたが、Windows Phone がレンダリングを「記憶」しているようです。

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

4

1 に答える 1

0

GC.Collect() を呼び出す代わりに、画像を表すオブジェクトでDispose()メソッドを呼び出すことをお勧めします。これにより、オブジェクトのメモリがいつ解放されるかをより詳細に制御できるようになり、アプリケーションのパフォーマンスが向上するはずです。

ほとんどの場合、これらの画像に使用しているオブジェクト タイプは、 GDI+ビットマップをラップする .Netビットマップクラスから継承されます。Dispose() メソッドを呼び出すと、GDI+ ビットマップに関連付けられた基になるデータが直接解放されます。関連する画像オブジェクトを null に設定することで、すでにこれを行っていますが、ラウンドアバウトの方法であり、選択した時点ではありません。.Net でオブジェクトを破棄する方法の詳細については、 IDisposable.Disposeメソッドに関するドキュメントを参照してください。

于 2013-08-15T01:45:07.273 に答える