c# 垃圾回收之定时器被提前回收

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApp7
{
    class Program
    {

        public delegate void MyDelegate();
        static void Main(string[] args)
        {          
            Timer timer = new Timer(TimerCallBack, null, 0, 2000);
            Console.ReadKey();
            //若没有下面这一句,在release模式下,定时器执行一次之后,
            //垃圾回收机制会发现main函数中定时器对象没有被任何对象引用,
            //会对其进行垃圾回收,定时器会因此而被触发停止。最终定时器方法会只执行一次。

            //但是如何将下面的方法改成timer=null,仍然没有用。JIT编译器是一个优化编译器,将对象设置为null时,
            //JIT会将在执行优化时,将timer=null这行代码整行删除。
            
            timer.Dispose();
        }

        private static void TimerCallBack(object o)
        {
#if MSHENG
            Console.WriteLine("msheng In Timer " + DateTime.Now);
#else
            Console.WriteLine("In Timer" + DateTime.Now);
#endif
            GC.Collect();
        }        
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值