当前位置:  开发笔记 > 编程语言 > 正文

.NET中的调试与发布

如何解决《.NET中的调试与发布》经验,为你挑选了5个好方法。

继续上一个问题,是否有一个全面的文档列出了C#应用程序中调试和发布模式之间的所有可用差异,特别是在Web应用程序中?

有什么区别?



1> Joe..:

"Debug"和"Release"只是Visual Studio定义的预定义项目配置的名称.
要查看差异,请查看Visual Studio中"项目属性"中的"生成"选项卡.

VS2005的不同之处包括:

调试配置中定义的DEBUG常量

优化Release配置中启用的代码

以及通过单击"高级"按钮可以看到的其他差异

但是你可以:

在Project Propeties/Build中更改Debug和Release配置的构建设置

右键单击解决方案资源管理器中的解决方案并选择Configuration Manager,创建自己的自定义配置

我认为DEBUG常量的行为相当清楚(可以在#if预处理器指令或ConditionalAttribute中引用).但我不知道有关确切启用哪些优化的全面文档 - 实际上我怀疑微软希望在没有通知的情况下自由地增强优化程序


这个答案是正确但肤浅的,我想知道有关代码如何使用代码优化的更多细节,并使用DEBUG常量.代码的行为方式有很多不同,您可以看一下我之前的问题

2> Scott Dorman..:

没有一个文件列出了这些差异.除了已经列出的一些差异之外,在调试模式下进行编译会关闭在运行时执行的大多数JIT编译器优化,并且还会在符号数据库文件(.pdb)中发出更完整的调试信息.

另一个很大的区别是GC行为有些不同,因为JIT编译器会根据需要插入对GC.KeepAlive()的调用以支持调试会话.



3> Michael Stum..:

我不知道一份简明的文件,但是:

Debug.Write调用在Release中被删除

在发布中,由于优化,您的CallStack可能看起来有点"奇怪",如Scott Hanselman所述



4> 小智..:

调试和发布只是不同解决方案配置的标签.如果需要,您可以添加其他人.如果您希望可以从配置管理器添加更多配置 -

http://msdn.microsoft.com/en-us/library/kwybya3w.aspx

主要差异 -

1.在调试dll中添加了几个额外的指令,使您能够在Visual Studio中的每个源代码行上设置断点.此外,代码将不会被优化,使您能够调试代码.在发布版本中,这些额外的说明将被删除.

2.PDB文件仅在调试模式下创建,而不是在相关模式下创建.

3.在发布模式下,cpde由内置于JIT编译器的优化器进行优化.它进行了以下优化:

•方法内联 - 方法调用由注入方法的代码替换.

•CPU寄存器分配 - 局部变量和方法参数可以保存在CPU寄存器中,而不会(或不经常)存储回堆栈帧

•数组索引检查消除 - 使用数组时的一个重要优化(所有.NET集合类在内部使用数组).当JIT编译器可以验证循环从不索引数组超出范围时,它将消除索引检查.

•   Loop unrolling -  Short loops (up to 4) with small bodies are eliminated by repeating the code in the loop body. 

•   Dead code elimination - A statement like if (false) { /.../ } gets completely eliminated. 

•   Code hoisting- Code inside a loop that is not affected by the loop can be moved out of the loop.

•   Common sub-expression elimination. x = y + 4; z = y + 4; becomes z = x



5> andleer..:

如果您使用任何ASP.NET Ajax控件,那么一个主要的性能区域:在发布版本中运行时,调试信息将从JavaScript库中删除,并且我已经看到复杂页面上的主要性能改进.其他基于Web的资源可以基于此设置进行缓存或不缓存.

此外,请记住,Web应用程序中的调试/发布由web.config文件决定,而不是Visual Studio中的设置.


    

更多信息:

不要在启用debug ="true"的情况下运行生产ASP.NET应用程序

推荐阅读
Gbom2402851125
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有