【问题标题】:<compilation debug="true"> in precompiled asp.net website - Does it matter?<compilation debug="true"> 在预编译的 asp.net 网站中 - 有关系吗?
【发布时间】:2009-04-29 09:51:57
【问题描述】:

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

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

【问题讨论】:

    标签: asp.net web-deployment-project


    【解决方案1】:

    查看以下优秀链接:

    基本上:

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

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

    【讨论】:

    • 好电话,我忘记了缓存/超时差异。
    • @Aras:我所有的页面都是在发布模式下预编译的。所以它们不会被重新编译,它们只会被运行时加载。那样的话,当不需要页面编译的时候,还会有区别吗?
    【解决方案2】:

    根据documentation

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

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

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

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

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

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

    【讨论】:

      【解决方案3】:

      来自博文ASP.Net – Never again fear publishing your website with debug=true

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

      本文继续建议设置生产服务器 machine.config 以确保强制零售部署模式,这实质上意味着调试始终为 false。

      【讨论】:

      • 我有一个发布模式下的预编译部署!
      • 您可能仍然会发现性能会受到影响,尤其是与上述最后两点有关。
      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 2018-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多