【问题标题】:How can you speed up the restart of an ASP.NET application?如何加快 ASP.NET 应用程序的重新启动?
【发布时间】:2011-01-10 06:10:32
【问题描述】:

如何确保在触发应用程序/应用程序池重启时,应用程序尽快恢复联机?

更好的是,有没有办法在通常的触发器发生时防止应用程序重新启动?比如修改 web.config、global.asax 或 machine.config?

【问题讨论】:

    标签: asp.net performance application-pool application-restart


    【解决方案1】:

    我遇到了一个类似的问题,因为我正在运行一个流量非常高的网站,每秒可以收到 300 多个请求。重启至少需要 90 秒。

    当我做出重新启动服务器的更改时,重新启动似乎会停止,直到所有旧请求(其中一些运行时间很长)关闭。我可以通过手动杀死旧的 w3wp.exe 实例来加快重启速度。

    有什么方法可以强制 IIS 立即关闭所有连接并进行硬重启? IIS 或 asp.net 中的某些设置来控制这个?

    【讨论】:

    【解决方案2】:

    对于 Web 应用程序项目,您可以使用 Web 部署项目 (VS2010 download link) 将站点预编译为类似于网站项目的 DLL。见ScottGu article on how to use WDPs

    【讨论】:

      【解决方案3】:

      ASP.NET 4.0 (Scott Guthrie talks about it) 中将提供“自动启动”功能,但现在对您没有帮助。

      请确保您的网站/应用程序正在运行的应用程序池不会自动进入“睡眠”状态。默认 AppPool 设置为在 20 分钟不活动后关闭。我记得这不会使网站重建,但会使第一个请求明显变慢。

      小记,网站项目也可以构建,所以你的 App_Code 将是空的,你的 bin 文件夹将包含一堆 .dll 的(只需使用 Build > Build Website)。这肯定会使对您网站的第一个请求更快。我认为网站应用程序不会比预编译的网站项目更快启动,但它更易于管理。

      【讨论】:

      • 是的,我确实在 4.0 的新功能集中看到了这一点。但是,我不知道这是否会加快速度;它只会确保应用程序已准备就绪。但实际的启动时间可能是相同的。关于应用程序池关闭...我不确定是否要删除它。如果没有人使用它,我仍然希望关闭应用程序,因为我们在同一台服务器上运行多个站点。但我明白你的意思。您确定可以这样“构建”网站项目吗?您的意思是已发布?
      【解决方案4】:

      是的,迁移到网络应用程序将加快重启过程。另一件事是让你的 global.asax 尽可能干净。

      即使使用 Web 应用程序,如果修改了这些配置文件中的任何一个或您的 bin 目录中的程序集发生更改,该站点也会重新启动。你无法阻止它。

      重启时间应该很快,大约 2 到 3 秒。但是,我见过一些非常复杂的 global.asax 文件,它们设置了一些域级别的数据,这些数据最多需要 20 秒。当然,他们愿意为此付出代价,因为这将一些正常的页面加载时间从 3 秒缩短到了 0.1 秒。

      【讨论】:

        【解决方案5】:

        我们主要使用网站项目,所以我认为切换到 Web 应用程序项目会加快速度,因为所有代码文件都预编译为 .dll。

        在使用网站项目时,我认为将 App_Code 文件移动到外部类库中也会加快速度,因为代码会被预编译。

        【讨论】:

          猜你喜欢
          • 2019-07-25
          • 1970-01-01
          • 2012-03-28
          • 1970-01-01
          • 2012-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多