1

Windows Phone アプリケーションを開発しています。私のアプリケーションでは、Longlistselector を使用し、MVVM を使用して画像を含む長いリストをロードしています。また、リストの後の詳細ページには、高解像度の画像がほとんどありません。

私のアプリケーションでは、ページ 1 からページ 2 へ、ページ 2 からページ 1 へ n 回移動します。戻るナビゲーションでアプリケーションがクラッシュし、ArgumentOutOfRangeException と OutOfMemoryException が発生します。

Windows Phone アプリケーションの分析を行いました。GC イベントが頻繁に呼び出されていることを示しています。ただし、どの時点でアプリケーションがクラッシュするか、およびアプリケーションが使用するメモリを削減またはクリーンアップする方法は示されません。

メモリのクリーンアップとメモリリークを防ぐ方法を知っている人がいたら教えてください。

4

2 に答える 2

0

メモリ リークの最大の落とし穴は、イベント ハンドラーが解放されないことです。イベントをサブスクライブするときはいつでも、更新が不要になったときにイベントのサブスクライブを解除する必要もあります。ページ 1 に戻っても、ページ 2 は実際には消えていないと思います。これを管理するのに役立つオーバーロードされたメソッド (OnNavigatingTo と OnNavigatingFrom) のペアがあると思います。

もう 1 つの方法は、WeakReference を使用し、EventAggregator を使用してデータを手動で渡すことです。おそらく最も使いやすいのは、MVVM Light Toolkit (Messenger) の一部です。この弱い参照では、イベント送信者がサブスクライバーへの参照を保持することはありません。

于 2013-06-16T10:44:37.313 に答える