MVVM-WPF:动态视图和内存泄漏?

时间:2012-05-02 03:18:01

标签: c# wpf mvvm memory-leaks

我有一个长期存在的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对象。其中大部分来自模板。我该如何正确解决这个问题呢?

2 个答案:

答案 0 :(得分:0)

试试这个工具对我帮助很大。 http://www.jetbrains.com/profiler/(有10天的试用期)

答案 1 :(得分:0)

在UI中绑定的类上不实现INotifyPropertyChanged会导致内存泄漏。请参阅:http://support.microsoft.com/kb/938416/en-us