2012-07-06 40 views
0

我們的應用程序代碼部署在環境爲windows server 2003,iis 6.0的生產服務器上。我們的應用程序中有一些緩存代碼,其絕對過期時間設置爲DateTime.Now.AddMinutes(30)。我們使用HttpContext.Current.Cache對象。緩存似乎沒有在IIS 6.0中的指定時間後過期

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

這樣做的一個常見原因是應用程序刷新(緩存刷新)或Web池重新啓動。如果網絡池在30分鐘之前重新啓動,則緩存將被刷新,因此在+31處不會看到任何尖峯。

檢查您的事件日誌,看看您是否在.NET引擎上看到任何可能導致進程重複使用的災難性錯誤,並檢查IIS上的回收時間以確保它們的設置不同。

+0

一旦我們啓動網絡池,我們再也不會重新啓動它。它在生產服務器上運行幾天。我們總是檢查事件日誌,也沒有錯誤報告。我們將每個向我們的生產服務器發出的請求記錄到一個文件中,併爲每個請求記錄時間在那裏,我們發現這個時間更長,以便在啓動應用程序後的每31,61,91分鐘提供請求。 – user965291 2012-07-06 11:43:27

+0

如何回收而不是重新啓動? IIS通常設置爲在X小時後重新啓動應用程序池 – 2012-07-06 14:20:27

相關問題