ASP.NET预热/初始化

ASP.NET预热/初始化,asp.net,entity-framework,precompiled,warm-up,Asp.net,Entity Framework,Precompiled,Warm Up,我正在努力消除(或至少最小化)我的.NET应用程序的启动/预热时间。即使这是一个普遍的问题,我也不确定如何做到这一点 关于.NET应用程序启动缓慢有很多问题。池回收、工作进程启动、动态编译.aspx文件、JIT等都可以很容易地解释这些问题。此外,应用程序中可能需要初始化更多的内容,例如EntityFramework和应用程序缓存 我发现了许多不同的解决方案,例如: (及) 然而,我并不完全满意上述任何解决方案。此外,我正在将我的应用程序部署到Azure网站(在大多数情况下),因此我对II

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

关于.NET应用程序启动缓慢有很多问题。池回收、工作进程启动、动态编译.aspx文件、JIT等都可以很容易地解释这些问题。此外,应用程序中可能需要初始化更多的内容,例如EntityFramework和应用程序缓存

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

  • (及)
然而,我并不完全满意上述任何解决方案。此外,我正在将我的应用程序部署到Azure网站(在大多数情况下),因此我对IIS的访问受到限制

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

  • 向应用程序中的每个.aspx文件发送HTTP GET(到 动态编译页面)
    • 这可以通过使用aspnet_compiler.exe预编译.aspx页面来避免
  • 向数据库发送查询以 初始化EntityFramework
  • 初始化应用程序缓存等
所以,我的最后一个问题是,是否有比我的“Warmup.aspx”脚本更好的替代方案?这是一个好方法还是你推荐其他方法?我真的想要一些官方的方法来处理上述标准


欢迎提出任何建议,谢谢

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

是否尝试了此处介绍的IIS自动启动功能


您是否进行了一些测量,以便了解您真正想要优化的领域?应用更改后,您可以看到效果。这对您试图避免的最终用户有什么影响?我没有精确测量,但影响取决于应用程序中有多少“预热”工作。我看到两个主要的“案例”:1)流量很少的小型闲置网站,这些网站受到自动池回收的影响,在第一次请求时总是很慢(约10秒)。2) 当进行升级/维护或强制池回收时,具有许多未预编译页面的大型网站-所有页面都有点慢(即额外1-3秒),这给人一种应用程序“缓慢”的印象。我不想避免这两个问题。预编译听起来在这两种情况下都会有最大的好处。除了启动时间之外,还有很多性能调整选项要考虑;是的,这是一个很好的策略。然而,我的问题是如何像你上面描述的那样“启动它”。当我切换到升级的实例时,速度会很慢,即使我不会有任何停机时间。此外,我希望避免空闲池回收(默认为20分钟)和强制池回收(默认为每29小时IIRC)后启动缓慢。对于手动升级/维护,我可以通过浏览网站自己预热/启动。谢谢发布您的答案!请注意,您应该将答案的重要部分发布在此网站上,否则您的帖子可能会被删除。如果您愿意,您可以继续添加该链接,但仅作为“参考”。答案应该是独立的,不需要链接。