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

本文探讨了.NET程序在Debug和Release模式下,Timer对象的行为差异。在Debug模式下,Timer正常工作,持续输出字符串;而Release模式中,为了优化,Timer可能提前释放,导致预期行为改变。这种差异可能导致调试困扰和潜在的运行时问题。解决方案是在适当位置显式调用Dispose()避免意外释放。
摘要由CSDN通过智能技术生成

同样的代码,在编译成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对象也不会被释放。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值