c# - MVVM-WPF : Dynamic view and memory leak?

标签 c# wpf mvvm memory-leaks

我有一个长期存在的 ViewModel 和一个动态 View ,只要用户想要查看 ViewModel,它就会添加到可视化树中。当用户关闭 View 时,它会从可视化树中移除。我故意在 View(UserControl) 中放置了 50mb 的虚拟数据:

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

当我将 View 添加到可视化树时,我发现 Process Explorer 的内存猛增。我关闭了 View (从可视化树中卸载它)然后显式调用垃圾收集方法:

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

但是,内存并没有减少,每当我将 View 添加到可视化树上时,都会再添加 50mb。我确定我的 ViewModel 没有引用 View 。

有什么建议可以解决这个问题或向我解释为什么会这样吗?

谢谢!

编辑:

我使用了 dotTrace 内存分析器,发现没有来自 ViewModel 的引用。所有对“数据”变量的引用都是 UI 对象。其中大部分来自模板。我该如何正确解决这个问题?

最佳答案

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

关于c# - MVVM-WPF : Dynamic view and memory leak?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10407258/

相关文章:

c# - Linq to XML 获取一对多元素名称和属性名称/值

wpf - 如何设置 ListView 控件中第一个 WPF RadioButton 的 XAML 默认选中?

c# - 子查询,在 Select 内部,不将 Order By 应用于基础查询

c# - 在什么假设下 Re-Sharper 会向我显示 "Use implicitly typed local variable"消息?

c# - 显示模态时如何最小化所有者窗口?

c# - 在不同的 View 模型之间共享PropertyChanged数据

MVVM IoC 挑战 : implement concrete class for this ViewModel factory interface

c# - WPF Datagrid 不显示查询结果,甚至其绑定(bind)

c# - 将字符串数组从 C# 传递到 C++ Com

c# - 如何通过 XAML 将数据添加到 listView,并将数据绑定(bind)到我的 ViewModel