【发布时间】:2017-09-06 16:44:31
【问题描述】:
我在我的 WPF 应用程序中跟踪 C# 代码,并且对分离事件有疑问。
public class Publisher
{
public event EventHandler Completed;
public void Process()
{
// do something
if (Completed != null)
{
Completed(this, EventArgs.Empty);
}
}
}
public class Subscriber
{
public void Handler(object sender, EventArgs args) { }
}
用法:
Publisher pub = new Publisher();
Subscriber sub = new Subscriber();
pub.Completed += sub.Handler;
// this will invoke the event
pub.Process();
我的问题是,如果我不取消订阅处理程序方法并使用以下代码行将对象设置为 null,会导致应用程序中的任何内存泄漏吗?
pub.Completed -= sub.Handler
pub=null;sub=null;
【问题讨论】:
-
不,不在那个 sn-p 中。 Publisher 对象仅由包含代码的方法的局部变量引用。因此,一旦 pub.Publish() 运行完成,两个对象就可以同时被垃圾收集。发布者的订阅者寿命更长,这是一个更麻烦的场景。
标签: c# performance memory-leaks event-handling