有効期間が長い ViewModel と、ユーザーが ViewModel を見たいときにいつでもビジュアル ツリーに追加される動的な View があります。ユーザーがビューを閉じると、ビジュアル ツリーから削除されます。View(UserControl) に意図的に 50 MB のダミー データを配置しました。
private byte[] data = new byte[50 * 1024 * 1024];
ビューをビジュアル ツリーに追加すると、Process Explorer のメモリが急増するのを見ました。ビューを閉じて (ビジュアル ツリーからアンロード)、明示的にガベージ コレクション メソッドを呼び出しました。
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
ただし、メモリは減少せず、ビューをビジュアル ツリーに追加するたびに、さらに 50 MB が追加されます。ViewModel が View を参照していないと確信しています。
この問題を解決するための提案、またはその理由を説明してください。
ありがとう!
編集:
dotTrace メモリ プロファイラーを使用したところ、ViewModel からの参照がないことがわかりました。「data」変数への参照はすべて UI オブジェクトです。そのほとんどはテンプレートからのものです。この問題を正しく解決するにはどうすればよいですか?