2011-12-07 63 views
1

我們的應用使用以下緩存中具有時間間隔(0,0,0)到期的對象會發生什麼情況?

int cacheTimeout = 5; // Default 5 minute timeout 
if(ConfigurationManager.AppSettings["CacheTimeout"] != null) 
{ 
    cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString()); 
} 
_cache.Insert(Key, CacheItem, null, DateTime.MaxValue, new TimeSpan(0, cacheTimeout, 0)); 

我們的經理擔心可能存在緩存問題增加了對象緩存,並想知道,如果你有一個0長度的時間跨度插入的對象會發生什麼。

我認爲該對象將被立即刪除。對還是錯?

+1

爲了測試這個,你可以設置一個onRemoved回調函數,Cache對象會告訴你何時刪除了這個對象。 – RickNZ

回答

0

答案是「錯」。

將絕對過期設置爲NoAbsoluteExpiration並將滑動過期設置爲新TimeSpan(0,0,0)時,將其插入緩存中時,不會立即觸發回調。我沒有等到它會發生什麼時候,甚至可能是20分鐘,也可能永遠不會。

因此改變了代碼,以這樣的:如果

int cacheTimeout = 5; // Default 5 minute timeout 
if(ConfigurationManager.AppSettings["CacheTimeout"] != null) 
{ 
    cacheTimeout = Convert.ToInt32(ConfigurationManager.AppSettings["CacheTimeout"].ToString()); 
} 
TimeSpan expiration = cacheTimeout > 0 ? new TimeSpan(0,cacheTimeout,0) : new TimeSpan(0,0,1); 
_cache.Insert(Key, CacheItem, null, System.Web.Caching.Cache.NoAbsoluteExpiration, expiration, CacheItemPriority.Default, OnUpdateCallback); 

這樣,我們有緩存的問題,我們可以更新web.config中設置緩存超時爲0,並有1秒到期。

相關問題