Debug和Release差别:GC回收

public static class Program {
    public static void Main() {
        // 创建每2000ms就调用一次 TimerCallBack 方法的 Timer 对象
        Timer t = new Timer(TimerCallBack, null, 0, 2000);

        Console.ReadLine();

        // t = null; 无效代码,这种情况下会被JIT编译器优化掉
    }
    private static void TimerCallback(Object o) {
        Console.WriteLine("In TimerCallback: " + DateTime.Now);

        // 强制执行一次GC
        GC.Collect();
    }
}
现象:DEBUG模式下,timer会一直保持存活;RELEASE模式下,timer只调用了一次,在GC.Collect()中被强制回收了。
说明:在Debug下,JIT编译器会强制将变量的生存期延长至方法结束,所以会一直运行。注意,由于GC提前调用,JIT编译器会优化掉 t = null; 之类的无效代码;
posted @ 2022-02-22 10:35  江境纣州  阅读(28)  评论(0编辑  收藏  举报