在 debug=false 的 Web 应用程序中,处于调试模式的 DLL 会发生啥?

Posted

技术标签:

【中文标题】在 debug=false 的 Web 应用程序中,处于调试模式的 DLL 会发生啥?【英文标题】:What happens to a DLL in debug mode inside a web application with debug=false?在 debug=false 的 Web 应用程序中,处于调试模式的 DLL 会发生什么? 【发布时间】:2009-06-29 10:38:18 【问题描述】:

我知道 debug=true 在任何生产服务器上都是一件坏事。

我目前正在使用一些来自第三方并在调试模式下编译的 dll,我想知道 - 在 debug=false 的 Web 应用程序中,处于调试模式的 DLL 会发生什么?

【问题讨论】:

【参考方案1】:

在 C# / .NET(与 C++ DLL 不同)中,这通常不是问题。 Debug 和 Release 几乎相同,并且没有内存管理问题(与 C++ DLL 一样)。

以下来自jaybaz的blog:

人们通常认为调试和发布之间的区别有 3 件事。你需要决定你对哪一个感兴趣:

“DEBUG”预处理器标志。可以使用“csc /define”在整个程序集/网络模块上设置,也可以使用#define 在整个文件上设置。

调试信息 (pdb)。用‘csc /debug[+|-]’设置。不影响codegen,所以真的不是很有趣。

优化。用‘csc /optimize[+|-]’设置。在托管代码中,运行时中的 JITter 几乎完成了所有优化。从这个标志生成的 IL 的差异非常小。 Whidbey C# 编译器在这个标志上比以前的版本有更多的不同,但仍然不大。

【讨论】:

【参考方案2】:

system.web/compilation 配置元素的 debug 属性对编译后的 DLL 的代码没有影响。

它只影响动态编译的代码,并对运行时有一些其他影响(例如,如果 debug=true,则忽略 system.web/httpRuntime 配置元素的 executionTimeout 元素)。

【讨论】:

【参考方案3】:

如果在调试模式下编译,AFAIK 编译器不会优化二进制数据,因此便于调试器使用。在某些情况下,它可能会导致性能不佳。编译器还为调试器的构建添加了额外的数据。

我假设您在谈论 ASP.Net 网站以及在调试模式与发布模式下编译的 dll。

【讨论】:

在 .NET 中,大多数优化都留给了 JIT,但是有一些优化(通常是针对大小)并没有按照您说的那样进行,以便于调试。

以上是关于在 debug=false 的 Web 应用程序中,处于调试模式的 DLL 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

设置 debug=false 实际上会导致渲染速度慢得多?

带有 FriendlyUrls 和 debug="false" 的 ASP.NET WebForms 项目在生产中引发 404

提高 ASP.NET Web 应用性能的 24 种方法和技巧

.NET开发人员必看:提高ASP.NET Web应用性能的24种方法和技巧——转

ASP.NET:如何在 DEBUG 模式下编译?

当 DEBUG = False 时 Django 转义 javascript