0

我们的应用程序代码部署在环境为 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 中没有重现这种行为吗?

提前致谢。

4

1 回答 1

0

造成这种情况的常见原因是应用程序刷新(缓存刷新)或 Web 池重新启动。如果网络池在 30 分钟过去之前重新启动,缓存将被刷新,因此您不会在 +31 看到任何峰值。

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

于 2012-07-06T11:16:42.247 回答