遗留应用程序中存在内存泄漏,因此我不太了解代码。我使用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
类,尽管我不完全了解正在发生的事情,但我认为该类是一个红鲱鱼。我认为根本原因是计时器(甚至是禁用的计时器)。