【发布时间】:2015-09-11 09:42:36
【问题描述】:
我知道 .NET 中有类似“EventHandlerManager”的东西。如果您在释放对象之前不取消订阅事件,我已经阅读了有关内存泄漏的信息...
我有以下代码:
public Person CurrentPerson
{
get { return currentPerson; }
set
{
if (currentPerson!= null) currentPerson.PropertyChanged -= propertyChanged;
currentPerson= value;
currentPerson.PropertyChanged += propertyChanged;
RaisePropertyChanged(() => CurrentPerson);
}
}
此属性类似于临时占位符,每当我调用时:
CurrentPerson = new Person();
我想听它的 propertyChange 事件...我不确定是否在事件处理的情况下防止内存泄漏。
感谢帮助
【问题讨论】:
-
如何处置具有 CurrentPerson 属性的对象。当包含属性的对象被销毁时,您需要取消订阅 PropertyChanged 事件。
-
这段代码非常荒谬,让一个类监听自己的事件毫无意义。您可以直接调用 this.propertyChanged() 来代替。但至少有一个优点,它不可能导致任何泄漏。
-
Hans Passant,此代码来自我的视图模型... CurrentPerson 未在“Person”类本身中实现。
标签: c# .net memory-leaks