取消注册所有事件以释放内存

Nic*_*ick 9 c# events

我有一个程序,允许编辑产品信息.我注意到在关闭编辑表单后它没有释放内存.经过一番研究后,我偶然发现了这个问题,提到问题可能在于事件订阅.

这对我来说很有意义,因为这个表单上有大约100多个控件,其中许多都是自定义事件的自定义事件,由父控件订阅.这会创建一个非常大的事件订阅层次结构.所以我找了一种方法来发布这些,并发现可以让你取消订阅该事件.

问题是,我有很多订阅.我是否真的必须在表单关闭时逐个手动取消订阅每个事件,或者至少有一种方法可以一次性释放它们,或者循环通过它们?

Mat*_*son 6

记住这一点:左边+=的对象保持活动包含右边方法的对象+=.也就是说,即使处理事件的对象(例如表单)被处置,引发事件的对象也会使处理事件的对象保持活动状态.

所以你需要确保的是所有的事件提升者都已经消失了.

但是,如果所有的事件饲养员碰巧在同一控制Form订阅了这些事件类,你会不会需要当窗体关闭手动解开所有的事件处理程序.

这是因为引发要形成的事件的控件具有与表单本身相同的生命周期.

如果您订阅了一个生命周期比订阅对象更长的对象引发的事件,您只需要担心.然后订阅对象(表单)需要在它(表单)被处理时取消订阅.