ASP.NET热身/初始化

时间:2012-08-07 21:14:23

标签: asp.net entity-framework precompiled warm-up

我正在尝试消除(或至少最小化).NET应用程序的启动/预热时间。我不确定如何做到这一点,尽管这是一个普遍关注的问题。

有很多关于.NET应用程序启动缓慢的问题。这些很容易通过池循环,工作进程启动,.aspx文件的动态编译,JIT等来解释。此外,还有更多的东西可能需要在应用程序中初始化,如EntityFramework和应用程序缓存。

我发现了很多不同的解决方案,例如:

但是,我对上述任何解决方案都不满意。此外,我正在将我的应用程序部署到Azure网站(在大多数情况下),因此我对IIS的访问权限有限。

我知道有一些自定义的“预热脚本”使用各种方法向应用程序发送请求(例如wget / curl)。我的想法是在我的每个ASP.NET应用程序中创建一个“Warmup.aspx”页面。然后我有一个热身服务,每隔5分钟就会向每个站点的Warmup.aspx发送一个HTTP GET。此服务可以是Azure中的WorkerRole,也可以是内部部署安装中的Windows服务。 Warmup.aspx将执行以下操作:

  • 向应用程序中的每个.aspx文件发送HTTP GET(到 动态编译页面)
    • 使用aspnet_compiler.exe
    • 预编译.aspx页面可以避免这种情况
  • 向数据库发送查询 初始化EntityFramework
  • 初始化应用程序缓存等

所以,我的最后一个问题是,是否有比“Warmup.aspx”脚本更好的选择?这是一个好方法还是你推荐其他方法?我真的想要一些能够处理上述标准的官方方法。

欢迎提出任何建议,谢谢!

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您可以拥有该网站的两个实例。当您需要部署新版本并因此需要启动周期时,从负载均衡器轮换中删除一个实例,部署并启动它,将其设置为并执行相同的操作2.滚动部署。