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

本文关键字:删除 事件处理 程序 添加 net | 更新日期: 2023-09-27 18:27:01

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

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

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

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

事件确实占用内存,并且在取消订阅之前不会被垃圾收集。它们是内存泄漏的常见原因。

  1. 事件既可以是静态的,也可以是实例绑定的。事件广播程序处于活动状态时,事件的订阅服务器永远不会被删除,除非隐式删除,通常使用-=运算符。

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

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

events类似于delegates(具有另一层保护)。

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

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

它并非"未被引用"。

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

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

您应该手动删除引用。