我有一個長壽命的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對象。大部分來自模板。我應該如何正確解決這個問題?
視圖是否存在任何附加到ViewModel或其他非UI對象的事件的代碼隱藏? – aqwert
nope。只有正常的數據綁定。 – icube
我會建議使用.NET內存分析器,如果這可能適合你。它應該給你一個直接的答案,是什麼導致它不被收集。 – Dror