遗留应用程序中存在内存泄漏,因此我不太了解代码。我使用MemProfiler进行了分析,发现TimerCall
个对象引用了越来越多的对象。这些TimerCallback
由_TimerCallback
个对象引用,这些是根的子节点。该图表看起来像Root
- > _TimerCallback
- > TimerCallback
- > MyObject
。
由于MyObject
在其构造函数中需要TimerCallback
,因此有几个调用:
new MyObject(int timeout, new TimerCallback(SomeCallbackMethod));
说实话,我这样做看起来很尴尬,但正如我所写,它是一个遗留应用程序,它是用“C风格”C#编写的,有很多空分配和Dispose()
调用。 ..
那么如何从root中删除对TimerCallback
的这些引用?
答案 0 :(得分:1)
这似乎是TimerCallback
对象中使用的Timer
。了解,为什么有很多计时器活跃。它们可能是保持回调活着的真正根源。
我只是在 Reflector 中查看_TimerCallback
课程,虽然我不完全理解发生了什么,但我认为这门课程是红鲱鱼。我认为根本原因是计时器(甚至可能是禁用的)。