在.net中添加和删除事件处理程序

时间:2012-03-06 19:44:19

标签: c# events delegates

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

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

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

3 个答案:

答案 0 :(得分:1)

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

的常见原因

答案 1 :(得分:1)

  1. 事件既可以是静态的,也可以是实例绑定的。事件广播者活着时,永远不会删除事件的订阅者,除非通过隐式方式这样做,通常使用 - =运算符。

  2. 是的,是的,是的。如果您没有清理订户,则会发生内存泄漏等待。

  3. 如果所有这些都是您关注的问题,也许您可​​以查看WeakEvent模式。

答案 2 :(得分:0)

eventsdelegates类似(另一层保护)。

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

此对象无法通过GC,因为您引用了它!

它不是“未引用的”。

但您的对象可以通过GC。 (如果没有引用)。

所以最终导致内存泄漏。

你应该手动删除引用。