4

有効期間が長い 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 オブジェクトです。そのほとんどはテンプレートからのものです。この問題を正しく解決するにはどうすればよいですか?

4

2 に答える 2

0

このツールを試してみてください。http://www.jetbrains.com/profiler/ (10 日間の試用版があります)

于 2012-05-02T14:27:46.327 に答える
0

UI にバインドされているクラスに INotifyPropertyChanged を実装しないと、メモリ リークが発生する可能性があります。参照: http://support.microsoft.com/kb/938416/en-us

于 2012-05-02T15:04:46.070 に答える