我有一个长期存在的 ViewModel 和一个动态视图,只要用户想要查看 ViewModel,它就会添加到可视化树中。当用户关闭视图时,它会从可视化树中移除。我故意将 50mb 的虚拟数据放在 View(UserControl) 中:
private byte[] data = new byte[50 * 1024 * 1024];
当我将视图添加到可视化树中时,我看到 Process Explorer 内存猛增。我关闭了视图(从可视化树中卸载它),然后显式调用了垃圾收集方法:
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
但是,内存并没有减少,每当我将视图添加到可视化树时,都会再添加 50mb。我确定我的 ViewModel 没有引用视图。
有什么建议可以解决这个问题或向我解释为什么会这样?
谢谢!
编辑:
我使用了 dotTrace 内存分析器,发现 ViewModel 没有引用。所有对“数据”变量的引用都是 UI 对象。其中大部分来自模板。我应该如何正确解决这个问题?