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; 之类的无效代码;
说明:在Debug下,JIT编译器会强制将变量的生存期延长至方法结束,所以会一直运行。注意,由于GC提前调用,JIT编译器会优化掉 t = null; 之类的无效代码;

浙公网安备 33010602011771号