.NET中的调试与发布
时间:2020-03-06 14:20:22 来源:igfitidea点击:
继续我的上一个问题,是否有全面的文档列出了C应用程序(尤其是Web应用程序)中调试和发布模式之间的所有可用差异?
有什么区别?
解决方案
我不知道一个简洁的文档,但是:
- Debug.Write调用在Release中被剥离
- 在发行版中,由于优化,CallStack可能看起来有些"奇怪",正如Scott Hanselman概述的那样
在调试模式下,使用GDI +进行绘制要慢得多。
发布版本:
- 相当快(最重要),已优化
- 无法调试(逐步)
- 并且不包含用" debug"指令编写的代码
请参阅"调试版本"与"发布版本"之间有什么区别?
"调试"和"发布"仅是Visual Studio定义的预定义项目配置的名称。
若要查看差异,请在Visual Studio的"项目属性"中查看"生成"选项卡。
VS2005中的差异包括:
- 在调试配置中定义的DEBUG常量
- 优化在发布配置中启用的代码
以及通过单击"高级"按钮可以看到的其他差异
但是你可以:
- 在项目属性/构建中更改调试和发布配置的构建设置
- 通过在解决方案资源管理器中右键单击解决方案并选择配置管理器来创建自己的自定义配置
我认为DEBUG常数的行为非常清楚(可以在#if预处理程序指令或者ConditionalAttribute中引用)。但是我不知道任何有关启用了哪些优化的全面文档,实际上我怀疑Microsoft可以自由地增强其优化器而无需另行通知
如果我们正在使用任何ASP.NET Ajax控件,则是一个主要的性能方面:在发行版中运行时,调试信息已从JavaScript库中删除,并且我已经看到了复杂页面上的主要性能改进。基于此设置,可以缓存或者不缓存其他基于Web的资源。
另外,请记住,Web应用程序中的调试/发布是由web.config文件而不是Visual Studio中的设置所决定的。
<system.web> <compilation debug="true">
更多信息:
- 不要在启用debug = true的情况下运行生产ASP.NET应用程序
没有一个文件列出了差异。除了已经列出的一些差异之外,以调试方式进行编译还会关闭大多数在运行时执行的JIT编译器优化,并且还会在符号数据库文件(.pdb)中发出更完整的调试信息。
另一个很大的不同是,GC行为有所不同,因为JIT编译器将适当/需要插入对GC.KeepAlive()的调用,以支持调试会话。