[.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, null, 1000, 1000);
Timer timer2 = new Timer(callback2, null, 1000, 1000);
Console.ReadLine();
}
...{
TimerCallback callback = delegate(object state)
...{
Console.WriteLine("Hei, world.");
};
TimerCallback callback2 = delegate(object state)
...{
Console.WriteLine("Hellow world.");
};
Timer timer = new Timer(callback, null, 1000, 1000);
Timer timer2 = new Timer(callback2, null, 1000, 1000);
Console.ReadLine();
}
这段代码的作用是每隔一秒在屏幕上输出两个字符串。由于Timer是局部变量,理论上是要在主函数结束后才释放的。Debug版的程序的行为确实是这样,屏幕上会不断输出两个字符串。可是Release版的程序,会提前释放两个timer对象,屏幕上只会输出一次两个字符串。
虽然Release版的程序为了优化才有这样的问题,不过由于两种编译模式所产生程序行为的差异,还是对程序调试造成了很多麻烦,也会买下在开发时埋下未知Bug的隐患。大家在编码时应注意同类问题。
注:如果在Console.ReadLine()语句后再加一句timer.Dispose()的话,那么timer对象就不会被释放。而且,这段程序里只有一个Timer类型的对象的话,那么Timer对象也不会被释放。
- [.net]危险!.net程序Debug和Resease版的不同行为模式。
- 用程序判断设置的是debug还是release以及assert在debug和release版本中的不同行为
- 让程序分别在DEBUG模式和RELEASE模式选择不同代码路径的方法 _DEBUG
- vs2005下debug模式和release模式的不同
- .net中不同程序集的调试
- 启动模式"singleTask"和FLAG_ACTIVITY_NEW_TASK具有不同的行为!
- 关于.net的debug和trace随谈
- 关于.net的debug和trace随谈
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- VS.Net中程序集的Debug版本和Release版本的区别
- MySQL的相关文档
- 上财后勤服务网服务器落实,试运行开始。下午竟然和功缘兄站在国定门口聊了2个多小时,感触颇深,有远见的技术人员,万里挑一。
- Blender 中的字体目录
- 请教 多表多条记录更新问题!!!!!
- 呵呵~~~
- [.net]危险!.net程序Debug和Resease版的不同行为模式。
- 处方管理,规则
- ASP.NET中实现模版的动态加载
- 视频捕获软件开发完全教学
- 我想给百度的创意
- css滤镜(转)
- 前不久找到一个很不错的软件
- 重生
- 你的手机内存不足了么?