我正在尝试消除(或至少最小化)我的 .NET 应用程序的启动/预热时间。我不太确定如何做到这一点,即使这是一个普遍的问题。
关于 .NET 应用程序启动缓慢有很多问题。这些很容易通过池回收、工作进程启动、.aspx文件的动态编译、JIT 等来解释。此外,应用程序中可能需要初始化更多内容,例如实体框架和应用程序缓存。
我找到了很多不同的解决方案,例如:
- ASP.NET 预编译 IIS
- 8 应用程序初始化(以及 IIS 7.5)
- 自动启动 ASP.NET 应用程序
但是,我对上述任何解决方案都不完全满意。此外,我正在将我的应用程序部署到 Azure 网站(在大多数情况下),因此我对 IIS 的访问权限有限。
我知道有一些自定义的"预热脚本"使用各种方法向应用程序发送请求(例如 wget/curl)。我的想法是在我的每个 ASP.NET 应用程序中创建一个"预热.aspx"页面。然后我有一个预热服务,它每隔一个.aspx每个站点的预热发送一个 HTTP GET ...5分钟。此服务可以是 Azure 中的 WorkerRole 或本地安装中的 Windows 服务。热身.aspx然后将执行以下操作:
- 将 HTTP GET 发送到应用程序中的每个.aspx文件(到动态编译页面)
- 这可以
- 通过使用aspnet_compiler.exe预编译.aspx页面来避免
- 将查询发送到数据库初始化实体框架
- 初始化应用程序缓存等
最后一个问题是,是否有比我的"热身.aspx"脚本更好的选择?这是一个好方法还是您推荐其他方法?我真的很想要一些可以处理上述标准的官方方法。
欢迎任何和所有建议,谢谢!
您是否尝试过此处描述的 IIS 自动启动功能?
https://www.simple-talk.com/blogs/2013/03/05/speeding-up-your-application-with-the-iis-auto-start-feature/
您可以有两个站点实例。当您需要部署新版本并因此遭受启动周期时,请从负载均衡器轮换中删除一个实例,部署并启动它,将其设置并执行相同的操作实例 2。滚动部署。