c# – 为什么GC无法弄清楚?

前端之家收集整理的这篇文章主要介绍了c# – 为什么GC无法弄清楚?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我的问题很简单,为什么GC无法弄清楚主要的计时器对象应该与TestTimer和相关的EventHandler中的计时器一起被垃圾收集?

为什么我不断获得console.Writeline输出

class Program
{
    public static void Main()
    {       
       TestTimer timer = new  TestTimer();
       timer = null;
       GC.Collect();
       GC.WaitForPendingFinalizers();
       Console.ReadKey();
    }
}

public class TestTimer
{
    private Timer timer;

    public TestTimer()
    {
        timer = new Timer(1000);
        timer.Elapsed += new ElapsedEventHandler(timer_Elapsed);
        timer.Start();
    }

    private void timer_Elapsed(Object sender,ElapsedEventArgs args)
    {
        Console.Write("\n" + DateTime.Now);
    }
}

解决方法

不依赖于GC,使用Dispose模式正确处理TestTimer(然后应该丢弃Timer).

然而,发生的事情是计时器通过自己获取GC句柄来保持活跃.阅读此博文:

http://nitoprograms.blogspot.com/2011/07/systemthreadingtimer-constructor-and.html?utm_source=feedburner&utm_medium=feed&utm_campaign=Feed%3A+blogspot%2FOlZtT+%28Nito+Programming%29

猜你在找的C#相关文章