试图追踪我们的 WPF/MVVM 应用程序中的一些内存泄漏,我发生了一些事情......
如果您使用特定于实例的处理程序在其关联的 ViewModel 中侦听 ModelItem 事件,那么只要 ModelItem 仍然存在,这是否会使 ViewModel 挂起?
考虑这种情况...
public class ItemViewModel
{
public ItemViewModel(ModelItem item)
{
this.Item = item;
item.SomeEvent += ItemSomeEventHandler
}
Public ModelItem Item { get; private set; }
// Note: This is a handler on this instance, not a shared handler
private void ItemSomeEventHandler(object s, EventArgs e)
{
Console.WriteLine(“The model changed!”);
}
}
如果这确实导致泄漏,您如何/在哪里解开它?您不能在“Dispose”中执行此操作,因为如果某些内容仍然具有对它的引用,则不会调用它,看起来确实如此:模型项。
合适的地方是在使用这个 ViewModel 的控件中实现 Dispose,然后在那里滴下一个事件取消挂钩例程吗?依靠外部的东西来确保你清理你自己的内部似乎有点危险,但是没有去一个 EventManager 架构,我不知道在这里做什么。