在.net中添加和删除事件处理程序
本文关键字:删除 事件处理 程序 添加 net | 更新日期: 2023-09-27 18:27:01
我最近创建了一个示例应用程序,其中我实现了事件和委托,当Properties值更改时,该事件将引发,我有一个关于事件的问题
-
事件对象是在内存中创建的吗?或者它们只是静态对象,一旦触发事件就会被删除?
-
事件执行后是否需要删除处理程序以释放资源。删除处理程序一旦完成,提高了应用程序的性能吗?我说的是使用大量事件的应用程序
事件确实占用内存,并且在取消订阅之前不会被垃圾收集。它们是内存泄漏的常见原因。
-
事件既可以是静态的,也可以是实例绑定的。事件广播程序处于活动状态时,事件的订阅服务器永远不会被删除,除非隐式删除,通常使用-=运算符。
-
是的,是的,也是的。如果你不清理你的订阅者,你就会有内存泄漏等着发生。
如果所有这些都是您关心的问题,也许您可以查看WeakEvent模式。
events
类似于delegates
(具有另一层保护)。
当您注册到一个事件时,您实际上是在引用另一个对象。
这个对象不能通过GC,因为你引用了它!
它并非"未被引用"。
但是你的对象可以通过GC。(如果未引用)。
所以你最终会出现内存泄漏。
您应该手动删除引用。