14

我正在使用 Visual Studio 2008 上的 Web 部署项目部署一个预编译和所有页面合并的网站。请注意,所有程序集和项目都已在发布模式下编译。

我所有的页面都是在发布模式下预编译的。所以它们不会被重新编译,它们只会被运行时加载。在那种不需要页面编译的情况下,<compilation debug="true">system.web中的设置会有什么不同吗?

4

3 回答 3

26

查看以下优秀链接:

基本上:

  • 由于调试支持的开销,您的代码将运行得更慢。
  • 脚本和图像不会缓存在客户端,因为如果您不断进行更改和调试,您不希望在开发中缓存内容。
  • 请求不会超时。同样,当您调试代码时,您不希望请求超时。

以上都不是可取的。您会在上述链接中发现更多缺点。

于 2009-04-29T10:05:39.190 回答
2

根据文档

指定是否编译调试二进制文件而不是零售二进制文件

但是,刚刚通过 System.Web 快速反映,我可以看到调试标志被以下使用(直接或间接):

  • 运行时编译 (ASPX/ASCX/MASTER)
  • 浏览器功能文件的代码生成
  • HttpDebugHandler,在调试会话期间使用

因此,如果您的网站是预编译的,您将不会收到性能损失。但是,由于 HttpApplication 将响应 DEBUG http 动词,因此您将面临安全问题。

简而言之,设置 debug=false,即使您的站点是预编译的。

编辑: debug=true 将导致缓存性能(参见 Mehmet Aras 的回答)命中并且没有执行超时,但它不会降低编译页面的执行速度。

于 2009-04-29T09:54:14.523 回答
2

来自博客文章ASP.Net – 再也不用担心使用 debug=true 发布您的网站

  • ASP.NET 页面的编译需要更长的时间(因为关闭了批处理编译)
  • 代码通常执行较慢
  • 内存占用增加
  • 从 WebResources.axd 处理程序下载的脚本和图像不会被缓存
  • 请求不会超时(这很糟糕,因为在生产环境中我们不希望请求被无限期地卡住)

这篇文章继续建议设置生产服务器 machine.config 以确保强制零售部署模式,这本质上意味着调试总是错误的。

于 2009-04-29T10:39:23.277 回答