【问题标题】:ASP.NET MVC - Application warmup - which of two approaches to use?ASP.NET MVC - 应用程序预热 - 使用两种方法中的哪一种?
【发布时间】:2017-09-27 09:01:23
【问题描述】:

为了加快我们的 ASP.NET MVC 应用程序的反应时间,我们希望在应用程序安装后(或在应用程序池被回收后)对其进行“预热”。应该从 SQL Server 数据库中获取一些常用的查找数据,并将其存储到 .NET 提供的全局 System.Runtime.Caching.MemoryCache 对象中。

对于您的 ASP.NET 应用程序有一个带有专用 IIS 的专用 VM 的情况,我首先将应用程序池设置为“始终运行” - 这是第 1 步。

鉴于这种情况,我看到了两种选择:

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

  2. global.asax.cs 中使用Application_Start 事件。如果我理解正确,此事件仅在第一次启动应用程序时调用(安装后会自动发生,因为应用程序池设置为“始终运行” - 对) ?)

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

感谢您提供任何输入、提示、警告或进一步详细解释此问题的链接!

【问题讨论】:

  • 您的应用程序是否已预编译?如果合并/取消合并。我相信这会影响你的“热身”时间。在我看来,始终运行的开销是您的整个应用程序都位于内存中并且永远不会“按需”释放?

标签: c# sql-server asp.net-mvc application-warmup


【解决方案1】:

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

Application_Start 有点用词不当,它实际上是在第一个请求上触发的。这意味着该站点可能会回收/重新启动并处于闲置状态,可能会升温。

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

【讨论】:

猜你喜欢
  • 2011-12-12
  • 1970-01-01
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多