我有一个长期存在的ViewModel和一个动态视图,只要用户想要查看ViewModel,就会将其添加到可视树中。当用户关闭View时,它将从可视树中删除。我故意在View(UserControl)中输入50mb的虚拟数据:
private byte[] data = new byte[50 * 1024 * 1024];
当我将View添加到可视树中时,我看到了Process Explorer内存的启动。我关闭了View(从可视化树中卸载它),然后显式调用了Garbage collect方法:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
但是,内存没有减少,每当我将View添加到可视树上时,都会添加另外50mb。我确信我的ViewModel没有引用View。
有任何解决这个问题的建议或向我解释为什么会这样?
谢谢!
编辑:
我使用了dotTrace内存分析器,发现ViewModel没有引用。对“data”变量的所有引用都是UI对象。其中大部分来自模板。我该如何正确解决这个问题呢?
答案 0 :(得分:0)
试试这个工具对我帮助很大。 http://www.jetbrains.com/profiler/(有10天的试用期)
答案 1 :(得分:0)
在UI中绑定的类上不实现INotifyPropertyChanged会导致内存泄漏。请参阅:http://support.microsoft.com/kb/938416/en-us