【问题标题】:Adding and Removing Event Handler in .net在 .net 中添加和删除事件处理程序
【发布时间】:2012-03-06 19:44:18
【问题描述】:

我最近创建了一个示例应用程序,其中我实现了事件和委托,当属性值更改时,此事件将引发,我对事件有疑问

  1. 事件对象是在内存中创建的吗?或者它们只是静态对象,一旦事件被触发就会被移除?

  2. 是否有必要在事件执行后删除处理程序以释放资源。完成后是否删除处理程序,提高应用程序性能,我说的是使用大量事件的应用程序

【问题讨论】:

    标签: c# events delegates


    【解决方案1】:

    事件确实会占用内存,并且在您取消订阅之前不会被垃圾回收。它们是memory leaks.的共同原因

    【讨论】:

      【解决方案2】:
      1. 事件既可以是静态的,也可以是实例绑定的。当事件广播器处于活动状态时,永远不会删除事件的订阅者,除非隐式这样做,通常使用 -= 运算符。

      2. 是的,是的,是的。如果你不清理你的订阅者,你就会有内存泄漏等待发生。

      如果您担心这一切,也许您可​​以研究WeakEvent 模式。

      【讨论】:

        【解决方案3】:

        events 就像delegates(还有另一层保护)。

        当您注册一个事件时 - 您实际上是在引用另一个对象。

        这个对象不能通过 GC,因为你引用了它!

        它不是“未引用”。

        但是你的对象可以通过 GC。 (如果未引用)。

        所以你最终会出现内存泄漏。

        您应该手动删除引用。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-05-10
          • 2016-06-06
          • 2012-04-28
          • 1970-01-01
          • 1970-01-01
          • 2010-11-21
          • 1970-01-01
          • 2022-01-14
          相关资源
          最近更新 更多