我有一个没有正确处理的ViewModel类。即使调用了Dispose,也永远不会释放内存。我想我正在删除所有的引用和EventListeners,所以没有对这个对象的引用 - 但显然我没有全部去,因为临时析构函数中的断点没有被击中(或只是看内存使用情况)。
如果有任何现有的引用或获取有关它们的任何信息,我有什么办法可以检查垃圾收集器吗?该课程非常复杂,并且链接了许多不同的模型,服务等,因此手动尝试猜测/浏览所有代码将需要做很多工作。
有点混乱。这是我如何使用IDisposable的一个非常简单的例子:
public class ShortLifecyceViewModel : IDisposable
{
private LongLifecycleService serviceWithEvent;
public ShortLifecyceViewModel(LongLifecycleService serviceWithEvent)
{
serviceWithEvent.EventTriggered += ServiceWithEvent_EventTriggered;
}
private void ServiceWithEvent_EventTriggered(object sender, EventArgs e)
{
//perform action
}
public void Dispose()
{
//if this is not called, there is a memory leak. The LongLifecyleService retains a reference to ShortLifecyceViewModel
//for its "long" life. If this is called, that reference is broken and ShortLifecyceViewModel can be GCed.
serviceWithEvent.EventTriggered -= ServiceWithEvent_EventTriggered;
}
}
编辑:更好的解决方案可能是实施弱事件处理程序。