【问题标题】:Precompilation and startup times on ASP.NetASP.Net 上的预编译和启动时间
【发布时间】:2008-09-11 11:53:53
【问题描述】:

我正在用 ASP.Net 2.0 开发一个(相对较小的)网站。在交付可执行文件之前,我还在使用 nAnt 对我的项目进行一些简单的调整。在当前状态下,网站是使用

进行“预编译”的

aspnet_compiler.exe -nologo -v ${Appname} -u ${target}

我注意到,在重新启动 IIS 池后(在空闲关机或回收之后),应用程序最多需要 20 秒才能重新联机(并且达到 Application_start)。

当我直接在 Visual Studio 中调试时(启动需要 2 秒),我没有遇到同样的问题,所以我想知道 aspnet_compiler 是否真的是个好主意。

我在 MSDN 上找不到太多信息。您如何编译您的网站以进行生产?

【问题讨论】:

    标签: c# asp.net compilation startup aspnet-compiler


    【解决方案1】:

    确保:

    1. 您使用的是 Web 应用程序项目而不是网站项目,这将为您的代码生成预编译的二进制文件
    2. 您在 web.config 文件中关闭了调试代码生成 - 我猜如果这与您使用 aspnet_compiler 时不同,代码可能会被重新编译

    如果您已经尝试过这些,您也许可以尝试在您的程序集上运行 ngen 从而节省 JIT 时间?

    【讨论】:

      【解决方案2】:

      为了获得最佳响应,不要让您的应用关闭。

      第一种方法是确保它非常受欢迎,以便始终有人使用它。

      或者,从其他地方获取一个很小的保持活动页面作为计划活动可用于保持您的网站“热”。

      【讨论】:

      • 我觉得有趣的是,有两个人在没有评论的情况下否决了我的答案,尽管事实上它是一些非常大的系统使用的一种现实方法。请注意,DotNetNuke 包含 keepalive.aspx 正是为此目的。
      • 不是我,但我认为反对票是因为这不会减少启动时间。此外,这在 IIS7.5/.Net 4 上是不必要的,因为 ASP .Net 4.0 附带了一个自动启动功能,可以完成同样的事情。
      【解决方案3】:

      如果您的网站编译为可更新,您会在虚拟目录中看到一堆 .ASPX 文件。这些必须在启动时编译。这样您就可以进入并更改 Web UI 本身。这是网站和网络应用程序的默认设置。

      【讨论】:

        【解决方案4】:

        确保这是在 web.config <compilation debug=false> 中设置的。在我的例子中,我还有一个批处理文件,它在提供给用户之前对所有主要页面发出获取请求(页面加载模拟)。

        【讨论】:

          【解决方案5】:

          关键是确保 IIS 应用程序池永远不会关闭。这是实际托管代码的地方。将“空闲超时”(在高级设置下)设置为非常高的值,例如 1440 分钟(24 小时),以确保只要有人每天访问您的网站一次,它就不会关闭。

          无论何时部署新代码,或者在没有任何流量的情况下超过此空闲超时时间,您仍将拥有 JIT 时间。

          Configuring IIS 7.x Idle Timeout

          【讨论】:

            【解决方案6】:

            @西蒙:

            • 该项目是一个 Web 应用程序。然后网站的启动速度会变慢(我不知道它有发生,除了不同的代码组织)?
            • 我检查了,当我在调用 aspnet_compiler 后编辑 web.config 时,我没有触摸调试值(但是,如果我不触摸 web.config,我会检查网站启动速度是否更快,只是为了确保)

            (我肯定会看看 ngen,我不知道那个工具。)

            【讨论】:

            • 我认为 Web 应用程序与网站的事情实际上可能与 Will 提到的可更新位有关 - 我的应用程序未标记为可更新。我认为您对组织方面的看法可能是正确的,我需要多做一些事情来确认。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-12-07
            • 2010-10-04
            • 1970-01-01
            • 1970-01-01
            • 2010-10-01
            • 2011-05-09
            相关资源
            最近更新 更多