我有一个.NET System.Threading.Timer计时器,每60秒钟滴答一次,并在每个滴答引入一个内存泄漏。当我的计时器滴答.... .NET内存泄漏
在计时器的每个滴答声上,代码分配一个IDisposable对象(称为SocketsMessageConnector)...但我确实正确地处理它。我运行了.NET Memory Profiler,每隔60秒我就看到一个SocketsMessageConnector类的新实例在内存中徘徊(所以15分钟后,我有15个实例)。内存分析器验证该实例实际上是否处置完毕,但是它显示的是由一个TimerCallback植入的实例,该实例根植于一个以GCHandle为根的_TimerCallback ...
这是怎么回事?为什么TimerCallback会保留在每个计时器上创建的新实例?
PS。剖析器在拍摄快照之前强制使用2个GC,因此我知道这实际上是泄漏,而不仅仅是GC的优化。
你可以发布一些代码给我们看看吗? – Nate 2011-05-17 16:59:18
我读了这个问题,并认为“当我的计时器轻轻泄漏” – 2011-05-17 17:15:18