2012-06-14 18 views
2

传统应用程序中存在内存泄漏,所以我不太了解代码。我使用MemProfiler进行了分析,发现有越来越多的对象被TimerCall对象引用。这些TimerCallback s被_TimerCallback对象引用,这些是根的孩子。该图看起来像Root_TimerCallbackTimerCallbackMyObject内存泄漏:根引用的TimerCallbacks对象

由于MyObject需要在其构造TimerCallback有几个电话,如:

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

说实话它看起来相当尴尬的我不喜欢这样,但我写的是一个旧的应用程序,它是写在“C风格”C#,有很多空分配和Dispose()调用...

那么我怎样才能从根删除这些对TimerCallback的引用?

+0

你有没有找到这个解决方案?我在我的应用程序中有定时器代码,但是我确信我总是在处理完定时器后处理它们,并且遇到同样的问题。 – Jimbidf

回答

1

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

我只是环顾_TimerCallback反射,虽然我不完全理解这是怎么回事,我认为这个类是红鲱鱼。我认为的根本原因是定时器(甚至可能是禁用的)。

+0

我还没有找到我的内存泄漏的解决方案,但它真的看起来像是由于某些Timer对象没有正确移除而导致的问题,因为代码中包含大量新的Timer(...)调用。编写代码的人没有意识到可以启动和停止定时器,而无需每次都创建新的实例。 – phatoni