【发布时间】:2012-08-19 01:05:36
【问题描述】:
我已经阅读了很多关于这个主题的内容,但我仍然没有明确的路径如何继续。谁能指出一些资源(或解释),详细说明如何找到未调用某些对象 dctor 的原因。
基本上我测试泄漏的逻辑是这样的(WPF 应用程序):
- 创建一些视图/视图模型
- 关闭视图
- 调用 GC.Collect()
几秒钟后,通常会调用 ViewModel 类的 dctor,但在我的应用程序上从未调用过。我想知道当时哪个对象持有对它的引用,因为在我看来这是找到内存泄漏原因的方法。
此类不使用任何非托管资源,也没有实现 IDisposable,这意味着没有 SupressFinalize 调用来阻止析构函数执行。
编辑:通过 ViewModelLocator 上的静态属性检索 ViewModel,并添加 List。这是 TabControl 所要求的,它需要绑定到视图模型的集合。 View 和 ViewModel 通过 DataTemplate 连接。
【问题讨论】:
-
在不知道您如何使用 viewModel 的情况下很难回答这个问题
-
抱歉,我认为检测内存泄漏的方法在大多数情况下都是相同的。我正在添加有关如何使用 VM 的信息
-
附带说明,如果你的类没有使用非托管资源,你真的不应该为它们实现终结器;最终确定时对象的状态是这样的,您不应该假设您可以访问以前在该类活动时有效的任何托管引用。终结器仅用于非托管清理(然后实际上仅作为适当确定性处置的备份。)
-
嗨,丹,我不认为这只是用于测试的调试信息。
标签: wpf debugging c#-4.0 memory-leaks