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

由于MyObject在其构造函数中需要TimerCallback,因此需要进行多次调用,例如:

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


老实说,这样做对我来说很尴尬,但是在我写这是一个旧应用程序时,它是用“ C风格” C#编写的,具有许多空值分配和Dispose()调用...

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

最佳答案

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

我只是在Reflector中查看_TimerCallback类,尽管我不完全了解正在发生的事情,但我认为该类是一个红鲱鱼。我认为根本原因是计时器(甚至是禁用的计时器)。

07-27 18:17