ASP.NET MVC - 应用程序预热 - 使用两种方法中的哪一种?

ASP.NET MVC - Application warmup - which of two approaches to use?

为了加快我们的 ASP.NET MVC 应用程序的反应时间,我们想 "warm up" 在安装应用程序后(或回收应用程序池后)。一些常用的查找数据应该从 SQL 服务器数据库中获取,并存储到 .NET 提供的全局 System.Runtime.Caching.MemoryCache 对象中。

如果您的 ASP.NET 应用程序有专用 VM 和专用 IIS,我首先将应用程序池设置为 "Always Running" - 这是第 1 步。

鉴于这种情况,我认为有两种选择:

  1. 根据 System.Web.Hosting.IProcessHostPreloadClient 界面in this blog post by Scott Gu所述的应用程序预热。如果我理解正确,这段代码在应用程序池启动时运行,并且在第一个请求被应用程序接受之前

  2. 使用 global.asax.cs 中的 Application_Start 事件。如果我理解正确,此事件仅在应用程序首次启动时被调用一次(这将在安装后自动发生,因为应用程序池设置为"Always Running" - 对吗?)

那么 - 鉴于此设置 - "pre-warming" 您的应用程序的首选方式是什么?这两种方法之间有什么显着差异吗?当采用一种方法而不是另一种方法时,我需要注意什么?

感谢您提供任何输入、提示、警告或进一步的链接来更详细地解释这一点!

简短的回答,使用 IProcessHostPreloadClient -- 它会在启动时立即 运行。

Application_Start 有点用词不当,它实际上是在 第一个请求 上触发的。这意味着该站点可能 recycle/restart 处于闲置状态,可能正在变暖。

如果您的站点是在 IIS 7 或更高版本上,我不知道使用 Application_Start 的理由。