2

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

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

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

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

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

4

1 回答 1

1

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

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

于 2012-06-14T10:39:30.347 回答