我遇到了一个奇怪的问题:据我所知,可以通过回收应用程序池来清除缓存。 然而,在最近的一个项目中,缓存并没有通过这种方式被清除。相反,我们不得不重置IIS来清除缓存。 这些行为之间有什么区别,以及我经历的差异的原因是什么?
当您回收AppPool时,存在一些重叠时间。您的不健康worker process被标记为要回收,但仍在处理它已经接收到的请求。(它将不会处理新的请求)。在所有现有请求都得到处理后,不健康的worker将被终止。使用IIS重置,所有的worker都将被终止,并清除内存中的缓存。一旦有新的请求进来,就会创建新的worker。因此,我认为无论是AppPool回收还是IIS重置都会清除缓存。据我所知,该缓存存储在应用程序域中。一旦不健康的worker process终止,所有缓存项都应该被销毁。
请查看以下文章以获取详细解释:http://fullsocrates.wordpress.com/2012/07/25/iisreset-vs-recycling-application-pools/ 总之:在IIS6中引入了“应用程序池回收”功能。IISRESET会停止并启动所有与IIS相关的服务。它试图正常关闭所有组件,即发送关闭请求并等待服务关闭。等待所有服务关闭后,再重新启动它们。AppPool回收首先调用一个新的工作进程,然后关闭旧的工作进程。这使得停机时间比IISRESET更短。