内存泄漏:由root引用的TimerCallbacks对象

时间:2012-06-14 10:17:40

标签: c# memory-leaks

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

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

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

说实话,我这样做看起来很尴尬,但正如我所写,它是一个遗留应用程序,它是用“C风格”C#编写的,有很多空分配和Dispose()调用。 ..

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

1 个答案:

答案 0 :(得分:1)

这似乎是TimerCallback对象中使用的Timer。了解,为什么有很多计时器活跃。它们可能是保持回调活着的真正根源。

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