不取消订阅c#中的事件可能有多严重? 是强制性还是可取的行动?
答案 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
此外,它可能会导致性能问题,因为事件处理程序将继续被调用,即使它不再对您有用。
另一方面,如果您刚刚结束程序的执行,那么没有理由取消订阅事件。它当然不是强制性的,我认为没有理由推荐它。