我有一個.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