Caching IIS中动态内容的随机延迟

Caching IIS中动态内容的随机延迟,caching,iis,iis-8,windows-server-2012-r2,windows-server,Caching,Iis,Iis 8,Windows Server 2012 R2,Windows Server,我有一个ASP.NET网站,其中有一个测试页面,可以获取一些动态页面。通常,所有依赖项的加载时间都非常快: 但有时一个或多个页面的加载速度比通常慢得多: 这种减速发生在随机页面和随机时间上。重新加载测试页面后,一切都恢复正常 我没有显式地使用任何动态内容缓存,但似乎通常都会缓存资源,但很少出错 另外,我放置了一个秒表来确定动态页面的执行时间。重置web.config后的第一次所有页面都会在20-50毫秒内执行,之后的每次(即使页面加载速度较慢的问题发生时)都只需要1毫秒,因此我猜问题出在IIS

我有一个ASP.NET网站,其中有一个测试页面,可以获取一些动态页面。通常,所有依赖项的加载时间都非常快:

但有时一个或多个页面的加载速度比通常慢得多: 这种减速发生在随机页面和随机时间上。重新加载测试页面后,一切都恢复正常

我没有显式地使用任何动态内容缓存,但似乎通常都会缓存资源,但很少出错

另外,我放置了一个秒表来确定动态页面的执行时间。重置web.config后的第一次所有页面都会在20-50毫秒内执行,之后的每次(即使页面加载速度较慢的问题发生时)都只需要1毫秒,因此我猜问题出在IIS方面。 接下来我应该检查什么

规格:.NET 4.5、Windows Server 2012 R2、IIS 8.5

提前谢谢

UPD:
谢谢你的快速回复。此延迟的主要版本是应用程序池回收。我需要指出的是,每第二次或第三次页面重新加载(当我反复单击F5时)都会出现延迟。我几乎可以肯定,回收在服务器上并不经常发生。

这可能是由于IIS处理AppDomains造成的。IIS在AppDomains中托管应用程序,JIT编译器在这些AppDomains中的工作方式与任何.NET应用程序一样。这意味着第一次使用页面/控制器时,JIT会编译代码,这需要时间。但是,与本地.NET应用程序不同,IIS偶尔会回收保存AppDomain的应用程序池,以防止出现错误(和释放资源),当您再次加载页面时,它必须重新编译您的应用程序

IIS只回收应用程序池作为预防错误,而不是保存资源。取决于如果您考虑内存泄漏的bug。P我不断更新我的答案。更好?是否有任何IIS设置可用于确定问题是否真的与回收有关?例如,设置一个巨大的超时,并确保此问题不再发生。@Toxantron对此没有“依赖”。由于无限递归等原因导致的异常高CPU或内存使用率是错误。Apache、IIS(所有web服务器)都有触发器,如果站点停留在阈值以上太长时间并可能导致系统崩溃,则会循环使用这些触发器。您正在寻找的是所谓的“预热”。在IIS 7.5+中作为模块提供。在以前的版本中,您需要在启动应用程序时执行预热脚本,例如在部署之后。这可以很简单,比如调用主页,或者点击几个页面以确保填充查找缓存