2012-05-02 49 views
4

我有一個長壽命的ViewModel和一個動態視圖,每當用戶想要查看ViewModel時,都會添加到視覺樹中。當用戶關閉視圖時,它將從視覺樹中移除。我故意把假數據的50MB的視圖(用戶控件):MVVM-WPF:動態視圖和內存泄漏?

private byte[] data = new byte[50 * 1024 * 1024]; 

我看了Process Explorer的內存拍攝,當我加入到可視化樹視圖。我關閉了視圖(從可視化樹卸載它),然後明確要求垃圾收集方法:

GC.Collect(); 
GC.WaitForPendingFinalizers(); 
GC.Collect(); 

然而,存儲器沒有減少,每當我添加到可視化樹視圖,另一個是50MB添加。我相信我的ViewModel沒有引用視圖。

任何建議來解決這個問題或解釋爲什麼這是這樣的?

謝謝!

編輯:

我用dotTrace內存分析器,發現沒有來自視圖模型參考。所有對「數據」變量的引用都是UI對象。大部分來自模板。我應該如何正確解決這個問題?

+0

視圖是否存在任何附加到ViewModel或其他非UI對象的事件的代碼隱藏? – aqwert

+0

nope。只有正常的數據綁定。 – icube

+1

我會建議使用.NET內存分析器,如果這可能適合你。它應該給你一個直接的答案,是什麼導致它不被收集。 – Dror

回答