应用程序池启动模式:OnDemand 与 AlwaysRunning,哪个最好?

Application Pool Start Mode: OnDemand vs AlwaysRunning, which the best?

我一直在为我的应用程序池使用 OnDemand 启动模式,但我最近听说 AlwaysRunning 模式,它允许部署到 IIS 的 ASP.NET 应用程序在部署后立即可用。似乎启用此功能会导致 IIS 在部署应用程序后立即启动应用程序,从而消除了网站“冷访问”通常所需的预热时间。 this 很棒的文章对此进行了解释。

下面我有一些疑惑,想了解一下:

  1. 使用 AlwaysRunning 功能,回收 应用程序池?使用的内存被删除并释放?工人进程 被终止并重新开始,或者它们继续可用 内存及其使用的内存未被删除和释放?

  2. OnDemand和OnDemand的优缺点是什么 总是运行?哪个对单个工作进程更好,哪个更好 更适合网络花园(多个工作进程)?

  3. 此外,有人可以解释一下网站在使用时的行为吗 AlwaysRunnig 结合进程空闲超时和空闲 超时动作和回收? OnDemand 也是如此。我想成为 清楚所有这些部分如何在这些情况下一起干预 (AlwaysRunning 和 OnDemand)。

1) 当您将应用程序池设置为总是 运行 回收时,它将删除 运行 工作进程并再次启动它。

2) 如定义所述,如果您始终设置 运行 IS 在启动 IIS 或创建应用程序池时立即启动应用程序池的工作进程。

OnDemand-> IIS 将在收到第一个 Web 应用程序请求时启动工作进程。

always运行的好处是用户在请求资源后无需等待。而 OnDemand 的缺点是 w3wp 启动时会有延迟。 always 运行 的缺点是内存是特定工作进程占用的方式。

在我看来,对于网络花园环境设置总是 运行 是一个更好的主意。

3)挂起就是冻结进程,比销毁进程效率高很多。默认情况下,IIS 将应用程序池设置为在 20 分钟不活动后“超时”。因此,如果您的站点在 20 分钟内没有任何访问者,应用程序池将关闭 - 释放这些系统资源。然后下次请求进入站点时,IIS 将自动重新启动应用程序池并提供请求的页面。

如果您希望您的静止图像始终设置为始终 运行 模式并且永不休眠,那么以下设置适合您:

  • 将启动模式设置为“始终运行”。

  • 将空闲超时(分钟)设置为 0。

  • Set Preload Enabled = True(网站提前设置)

  • 禁用应用程序池回收。