gpt4 book ai didi

c# - 注销所有事件以释放内存

转载 作者:太空狗 更新时间:2023-10-29 17:48:18 26 4
gpt4 key购买 nike

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

这对我来说很有意义,因为这个表单上有大约 100 多个控件,其中许多是自定义的,具有由其父控件订阅的自定义事件。这创建了一个相当大的事件订阅层次结构。所以我寻找一种方法来释放这些并找到 this这允许您取消订阅该事件。

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

最佳答案

记住这一点:+= 左侧的对象使包含 += 右侧方法的对象保持事件状态。也就是说,引发事件的对象使处理该事件的对象保持事件状态,即使处理该事件的对象(例如表单)已被释放。

因此,您需要确保所有事件引发者都已消失。

但是,如果所有事件引发器恰好是订阅这些事件的同一个 Form 类中的控件,您将不需要手动取消 Hook 所有事件表单关闭时的处理程序。

这是因为引发表单订阅的事件的控件与表单本身具有相同的生命周期。

只有当您订阅的对象引发的事件比订阅对象的生命周期长时,您才需要担心。 然后订阅对象(表单)在处理它(表单)时需要取消订阅。

关于c# - 注销所有事件以释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16362027/

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