是否有必要取消订阅活动?

时间:2010-06-03 07:27:38

标签: c# events memory

不取消订阅c#中的事件可能有多严重? 是强制性还是可取的行动?

3 个答案:

答案 0 :(得分:20)

这是MSDN documentation中您应该考虑的重要部分

  

阻止您的事件处理程序   在事件发生时被调用   提出,只是取消订阅   事件。为了防止资源   泄漏,取消订阅很重要   处理之前的事件   订户对象。直到你   取消订阅活动,   作为基础的多播委托   发布对象中的事件有一个   参考代表那个   封装订户的事件   处理程序。 只要发布   对象持有该引用,您的   订阅者对象不会是垃圾   收集

答案 1 :(得分:4)

这取决于订阅者和发布者的生存时间。以下是关于该问题的深入文章以及如何在此处解决问题的几种方法:Solving the Problem with Events: Weak Event Handlers

答案 2 :(得分:3)

取消订阅活动非常重要。如果你不这样做,那么订阅者就不能被垃圾收集,导致 - 本质上 - 内存泄漏。以下是您未取消订阅时可能遇到的问题的一个很好的示例:

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

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

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