代码之家  ›  专栏  ›  技术社区  ›  Arseny

是否需要取消订阅活动?

  •  20
  • Arseny  · 技术社区  · 14 年前

    不退订“C”中的活动可能有多严重? 它是强制性的还是可取的?

    3 回复  |  直到 14 年前
        1
  •  20
  •   Pieter Germishuys    14 年前

    这是 MSDN documentation 你应该考虑

    防止事件处理程序 当事件为 提出,只是取消订阅 事件。为了防止资源 泄密,退订很重要 从处理前的事件 订阅服务器对象。直到你 取消订阅事件, 构成 发布对象中的事件具有 对代表的引用 封装订阅服务器的事件 处理程序。 只要出版 对象保存该引用,您的 订阅服务器对象将不是垃圾 收集。

        2
  •  4
  •   Giorgi    14 年前

    这取决于订阅服务器和发布服务器的生存时间。下面是一篇关于这个问题的深入文章,以及如何解决这个问题的几种方法: Solving the Problem with Events: Weak Event Handlers

        3
  •  3
  •   Joe H    14 年前

    取消订阅活动很重要。如果您不这样做,那么订阅服务器就不能被垃圾收集,这实际上会导致内存泄漏。以下是一个很好的例子,说明如果您不取消订阅,可能会遇到的问题:

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

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

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