取消订阅事件是否必要?

24

不从C#事件中取消订阅会有多严重?这是强制性的还是建议性的行为?

3个回答

22

以下是需要您考虑的来自MSDN文档中重要的部分:

如果希望事件被引发时不调用事件处理程序,只需取消订阅事件即可。为了防止资源泄漏,重要的是在处理订阅对象之前取消订阅事件。在取消订阅事件之前,发布对象中的多路广播委托将持有封装订阅者的事件处理程序委托的引用只要发布对象保持该引用,您的订阅对象就不会被垃圾回收。


4

3

及时取消订阅事件非常重要。如果不这样做,订阅者无法被垃圾回收,实质上会导致内存泄漏。以下是一个很好的例子,说明如果不取消订阅可能会遇到的问题:

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

此外,这可能会导致性能问题,因为即使事件处理程序不再对您有用,它仍将继续被调用。

另一方面,如果您只是结束程序的执行,则没有必要取消订阅事件。这当然不是强制性的,我也看不出任何推荐的理由。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接