内存泄漏:由根引用的计时器回调对象

本文关键字:计时器 回调 对象 引用 泄漏 内存 | 更新日期: 2023-09-27 18:37:04

遗留应用程序中存在内存泄漏,所以我不太了解代码。我使用 MemProfiler 进行了分析,发现越来越多的对象被TimerCall对象引用。这些TimerCallback_TimerCallback对象引用,这些对象是根的子级。图形看起来像 Root -> _TimerCallback -> TimerCallback -> MyObject

由于MyObject在其构造函数中需要一个TimerCallback,因此有几个调用,例如:

new MyObject(int timeout, new TimerCallback(SomeCallbackMethod));

老实说,这样做对我来说看起来很尴尬,但是当我编写它时,它是一个遗留应用程序,它是用"C 风格"C# 编写的,有很多空赋值和Dispose()调用......

那么如何从根中删除这些对TimerCallback的引用呢?

内存泄漏:由根引用的计时器回调对象

看起来像您的TimerCallback正在Timer对象中使用。找出,为什么有很多计时器处于活动状态。它们可能是保持回调的真正根源。

我只是在Reflector中环顾_TimerCallback课,虽然我不完全理解发生了什么,但我认为这门课是一个红鲱鱼。我认为根本原因是计时器(甚至可能是禁用的计时器)。