Jos*_*son 9 c# asp.net events idisposable red-gate-ants
我正在维护一个内存泄漏的Web应用程序.
基于我使用Red Gate ANTS内存分析器的调查,我很确定内存泄漏是由业务层中的事件处理程序引起的.
有一个集合在每个添加的项目上注册一个事件处理程序,以便集合可以在项目的日期更改时重新排序.看来这个事件处理程序是罪魁祸首.
此应用程序的业务层非常复杂,因此将集合及其项目保留在内存中会拖拽其他一些对象.
我在集合上实现了IDisposable,并在Dispose方法中删除了事件处理程序:
p.OnPunchDateChanged -= this.OnPunchDateChanged;
Run Code Online (Sandbox Code Playgroud)
但是,实现IDisposable并没有帮助,因为我无法在using或try/catch块中包装对集合的所有引用.此集合由我无法控制的应用程序部分使用.
如何清除这些事件处理程序以解决此内存泄漏?
首先,为了证明这一点,尝试将事件的添加和删除记录到一个简单的文本文件中。然后,检查添加和删除的数量。
听起来好像业务逻辑中的某个地方存在错误,该错误不会在所有情况下取消注册事件。
| 归档时间: |
|
| 查看次数: |
10992 次 |
| 最近记录: |