2010-06-03 97 views

回答

18

这是从MSDN documentation的重要组成部分,你应该考虑

要防止事件处理程序从 当事件是 提出被调用,只需从 事件退订。为了防止资源泄漏,在处理用户对象之前,从事件中取消订阅 是很重要的。直到您 取消订阅事件,发布对象中位于 事件之下的 多播委托对 封装订阅者事件 处理程序的代理的引用具有 引用。 只要发布 对象拥有该引用,您的 订户对象将不会收集垃圾 。

2

重要的是取消订阅事件。如果你不这样做,那么订阅者不能被垃圾收集,实质上就是内存泄漏。以下是你可能会遇到,如果你不退订的问题,一个很好的例子:

http://developers.slashdot.org/article.pl?sid=07/11/17/0552247

此外,它可能会导致性能问题的事件处理程序将继续调用,即使它不是做对你有用的东西了。

另一方面,如果您刚刚结束程序的执行,那么没有理由退订事件。这当然不是强制性的,我不认为有任何理由推荐它。