我已经在开发一个C#/WPF应用程序了一段时间,我认为我的某些对象没有像我预期的那样被垃圾收集。
我是如何做出这个判断的呢?
我在我期望被垃圾收集的类中添加了finalizers,并设置了断点。我运行我的应用程序,触发一系列事件来a)创建对象并b)使对象在理论上被废除。例如,我打开对话框,然后关闭它等。我的finalizers没有被调用。
为了确保GC没有花费过长的时间,或者对象以某种方式晋升到旧一代,因此不能以相同的速度进行收集,我甚至创建了一个线程,定期强制进行垃圾收集,即:
System.GC.Collect();
System.GC.WaitForPendingFinalizers();
仍然没有触发终结器断点。 我相当确定有某些引用阻止这些对象被回收,但我无论如何都无法确定是什么。
所以我的问题有两个方面:
- 根据我的测试,我的结果是否有效?
- 如果有效,是否有一些机制或工具可以确定对象引用(即对象引用链的视觉表示)?
提前感谢!