【发布时间】:2012-03-06 19:44:18
【问题描述】:
我最近创建了一个示例应用程序,其中我实现了事件和委托,当属性值更改时,此事件将引发,我对事件有疑问
事件对象是在内存中创建的吗?或者它们只是静态对象,一旦事件被触发就会被移除?
是否有必要在事件执行后删除处理程序以释放资源。完成后是否删除处理程序,提高应用程序性能,我说的是使用大量事件的应用程序
【问题讨论】:
我最近创建了一个示例应用程序,其中我实现了事件和委托,当属性值更改时,此事件将引发,我对事件有疑问
事件对象是在内存中创建的吗?或者它们只是静态对象,一旦事件被触发就会被移除?
是否有必要在事件执行后删除处理程序以释放资源。完成后是否删除处理程序,提高应用程序性能,我说的是使用大量事件的应用程序
【问题讨论】:
事件确实会占用内存,并且在您取消订阅之前不会被垃圾回收。它们是memory leaks.的共同原因
【讨论】:
事件既可以是静态的,也可以是实例绑定的。当事件广播器处于活动状态时,永远不会删除事件的订阅者,除非隐式这样做,通常使用 -= 运算符。
是的,是的,是的。如果你不清理你的订阅者,你就会有内存泄漏等待发生。
如果您担心这一切,也许您可以研究WeakEvent 模式。
【讨论】:
events 就像delegates(还有另一层保护)。
当您注册一个事件时 - 您实际上是在引用另一个对象。
这个对象不能通过 GC,因为你引用了它!
它不是“未引用”。
但是你的对象可以通过 GC。 (如果未引用)。
所以你最终会出现内存泄漏。
您应该手动删除引用。
【讨论】: