小编典典

不注销事件处理程序是否不好?

c#

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


阅读 262

收藏
2020-05-19

共1个答案

小编典典

如果您已经A发布了一个事件,并B订阅了一个事件(处理程序),那么如果A要生存的时间比更长,那就是不退订只是一个问题B。基本上,事件订阅意味着A仍然可以看到B,因此可以防止对其进行垃圾回收,即使您忘记了它(也可能忘记了Disposed()它),仍然可以在其上触发事件。

例如,如果A是一个静态事件,这是一个问题,并且您的应用程序在B死后运行了一段时间……但是B可以生存到A,因此B不会被垃圾回收。

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

如果B的寿命比A长得多,B会阻止A被垃圾收集吗?

答案是“否”。B在整个事件中都没有提及A;A将正常收集

2020-05-19