[.net]危险!.net程序Debug和Resease版的不同行为模式。

来源:互联网 发布:淘宝店铺如何发布宝贝 编辑:程序博客网 时间:2024/05/19 13:16

同样的代码,在编译成Debug版和Resease版的行为会有不同。

程序代码如下

        static void Main()
        
{
            TimerCallback callback 
= delegate(object state)
            
{
                Console.WriteLine(
"Hei, world.");
            }
;

            TimerCallback callback2 
= delegate(object state)
            
{
                Console.WriteLine(
"Hellow world.");
            }
;

            Timer timer 
= new Timer(callback, null10001000);
            Timer timer2 
= new Timer(callback2, null10001000);

            Console.ReadLine();
        }

 这段代码的作用是每隔一秒在屏幕上输出两个字符串。由于Timer是局部变量,理论上是要在主函数结束后才释放的。Debug版的程序的行为确实是这样,屏幕上会不断输出两个字符串。可是Release版的程序,会提前释放两个timer对象,屏幕上只会输出一次两个字符串。

虽然Release版的程序为了优化才有这样的问题,不过由于两种编译模式所产生程序行为的差异,还是对程序调试造成了很多麻烦,也会买下在开发时埋下未知Bug的隐患。大家在编码时应注意同类问题。

注:如果在Console.ReadLine()语句后再加一句timer.Dispose()的话,那么timer对象就不会被释放。而且,这段程序里只有一个Timer类型的对象的话,那么Timer对象也不会被释放。