我正在使用 C#,但在 VB.NET 中可能相同。在 C++ 中,我只需在对象析构函数上设置一个断点,以了解它何时/是否被删除/释放。我知道在winforms中,基类调用SupressFinalize,因此永远不会调用表单析构函数,所以我想我不能那样做。 是否有另一种方法可以知道对象是否已被垃圾收集? 这似乎是一个 catch-22,因为如果有你可能需要一个引用来检查,但是通过持有该引用,收集的垃圾不会粉碎它。
我已经阅读了哪些策略和工具对在 .NET 中查找内存泄漏有用?,我知道有一些工具和/或框架可以处理这个“大图”,我相信几周后我会尝试其中的几种方法。现在我只是有一种非常强烈的感觉,我可能有与未删除的表单有关的泄漏,所以只想检查这件事(我想知道只是为了知道)。
我知道我可以观看 Dispose,但我很确定 Dispose 可以被调用,但最终表单对象仍然存在。为了测试该理论,我创建了一个已知问题,我在表单中注册了回调事件,然后关闭了表单而不取消注册。果然, Dispose 被调用(并且“disposing”是真的),但后来当事件被触发时,它仍然在我应该已经被处理的表单内达到了我的断点。