加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 18:31:17 所属栏目:百科 来源:网络整理
导读:我的问题很简单,为什么GC无法弄清楚主要的计时器对象应该与TestTimer和相关的EventHandler中的计时器一起被垃圾收集? 为什么我不断获得console.Writeline输出? class Program{ public static void Main() { TestTimer timer = new TestTimer(); timer = nu
我的问题很简单,为什么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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读