gpt4 book ai didi

c# - 不注销事件处理程序不好吗?

转载 作者:IT王子 更新时间:2023-10-29 03:43:47 27 4
gpt4 key购买 nike

如果我的应用程序只注册了几个事件处理程序(并且使用这些事件的对象在应用程序关闭之前不会被释放),我真的需要担心注销这些处理程序吗?我能看到的唯一充分理由是,如果触发您不一定关心的事件(即您有多个处理程序注册到一个事件),可能会有一些额外的开销。还有其他充分的理由吗?有人因为没有注销事件而遇到重大问题吗?

最佳答案

如果您有 A 发布一个事件,而 B 订阅一个事件(处理程序),那么如果 A 不退订只是一个问题 将比 B 活得更久。基本上,事件订阅意味着 A 仍然可以看到 B,因此可以防止它被垃圾收集,并且即使你忘记了它仍然会触发事件它(也许 Disposed() 它)。

例如,如果 A 是一个静态事件,并且您的应用程序在 B 死后运行了一段时间,这就是一个问题......但是B 将与 A 一样长,因此 B 不会被垃圾收集。

需要注意的是,有人可能会问以下问题:

if B lives a lot longer than A, will B keep A from being garbage collected?

答案是“不”。 B 没有通过事件引用 A; A将正常收集

关于c# - 不注销事件处理程序不好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1061727/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com