gpt4 book ai didi

c# - 未注册的事件处理程序导致内存泄漏

转载 作者:太空狗 更新时间:2023-10-29 17:55:45 25 4
gpt4 key购买 nike

我正在维护一个存在内存泄漏的 Web 应用程序。

根据我使用 Red Gate ANTS 内存分析器进行的调查,我非常确定内存泄漏是由业务层中的事件处理程序引起的。

有一个集合在每个添加的项目上注册一个事件处理程序,以便该集合可以在项目的日期更改时重新排序。看来这个事件处理程序是罪魁祸首。

此应用程序的业务层非常复杂,因此将集合及其项目保存在内存中会拖累一堆其他对象。

我已经在集合上实现了 IDisposable 并删除了 Dispose 方法中的事件处理程序:

p.OnPunchDateChanged -= this.OnPunchDateChanged;

但是,实现 IDisposable 没有帮助,因为我无法将所有对集合的引用包装在 using 或 try/catch block 中。该集合由我无法控制的应用程序部分使用。

如何清除这些事件处理程序以解决此内存泄漏问题?

最佳答案

首先,为了证明这一点,尝试将事件的添加和删除记录到一个简单的文本文件中。然后,检查添加了多少与删除了多少。

听起来好像业务逻辑中某处存在错误,它不会在所有情况下取消注册事件。

关于c# - 未注册的事件处理程序导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/448197/

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