我们的应用程序代码部署在具有环境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中不会重现此行为?
提前致谢。
答案 0 :(得分:0)
此常见原因是应用程序刷新(缓存已刷新)或Web池重新启动。如果Web池在30分钟之前重新启动,则刷新缓存,因此您不会在+31处看到任何峰值。
检查您的事件日志,看看您是否在.NET引擎上发现任何可能导致进程回收的灾难性错误,还要检查IIS上的回收时间,以确保它们的设置不同。