在IIS 6.0中指定的时间后,缓存似乎没有过期

时间:2012-07-06 09:48:43

标签: asp.net caching iis-6

我们的应用程序代码部署在具有环境Windows Server 2003,iis 6.0的生产服务器上。我们的应用程序中有一些缓存代码,其绝对过期时间设置为DateTime.Now.AddMinutes(30)。我们使用了HttpContext.Current.Cache对象。

HttpContext.Current.Cache.Add(Scope,objectCache,
                                      null,
                                      DateTime.Now.AddMinutes(30),
                                      Cache.NoSlidingExpiration,
                                      CacheItemPriority.High, LifeStyleEvicted);



private static void LifeStyleEvicted(string key, object value, CacheItemRemovedReason reason)
{
var objectCache = ((IObjectCache)value);
if (objectCache != null) objectCache.DisposeAndClear();
}

因此,每30分钟后应重新启动缓存。在第31分钟开始的所有请求应该比正常时间长一些。但是在Windows Server 2003和IIS 6.0中都没有观察到这种行为。

最近我们将代码部署到Windows Server 2008,IIS 7.5。在这种环境中,在第31分钟开始时提出的所有请求都比正常情况要长。

有人可以告诉我为什么在Windows Server 2003和IIS 6.0中不会重现此行为?

提前致谢。

1 个答案:

答案 0 :(得分:0)

此常见原因是应用程序刷新(缓存已刷新)或Web池重新启动。如果Web池在30分钟之前重新启动,则刷新缓存,因此您不会在+31处看到任何峰值。

检查您的事件日志,看看您是否在.NET引擎上发现任何可能导致进程回收的灾难性错误,还要检查IIS上的回收时间,以确保它们的设置不同。