2011-08-03 48 views
8

什麼是主要的優點缺點使用HttpRuntime緩存反對使用簡單的靜態字段?HttpRuntime緩存與靜態字典/字段

我需要將數據存儲在整個ASP.NET應用程序的範圍內。

HttpRuntime.Cache["MyData"] = someHashtable; 

private static System.Collections.Hashtable _myData; 
public static System.Collections.Hashtable MyData 
{ 
    get 
    { 
     if (_myData == null) 
     { 
      _myData = new System.Collections.Hashtable(); 
      // TODO: Load data 
     } 
     return _myData; 
    } 
} 

回答

5

對象有未知的到期期限,除非明確(這意味着對象可以終止任何時間),而您HashTable中的對象住您的應用程序池是活的(除非你手動刪除的條目)。 HttpRuntime.Cache還允許您設置各種其他特徵,如(可選)緩存項優先級和到期時間。

+1

當你使用大量的緩存數據的大型企業應用程序時,使用'HttpRuntime.Cache'時我擔心的是密鑰衝突。 但是就我所見,'HttpRuntime.Cache'除了優先級和到期時間之外,還有一個更加出色的特性。 ** ** CacheDependencies。所以即使我想緩存永不過期的數據,它最終也會改變,這種改變可以通過緩存依賴(希望)來處理。 –

0

與您可以輕鬆地設置一個結束日期的有效性緩存;緩存對象會自動過期內容。

還緩存可以給出一個優先級,即不太重要的項目可給予低優先級,以便當服務器獲得高負荷,該項目首先去除

與cahce但是你永諾必須做一些額外的因爲在單元測試期間httpcontext不可用,所以你的單元測試需要付出努力。在HttpRuntime.Cache

+0

'HttpContext'讓我很頭疼。幸運的是,情況並非如此。即使在單元測試中也可以訪問「HttpRuntime.Cache」。但它不必完全功能,因爲[這裏](http://msdn.microsoft.com/en-us/library/system.web.caching.cache.aspx)他們說不要在ASP之外使用它.NET應用程序。 –

0

HttpRuntime.Cache允許您指定過期回調,但對於靜態字典,您將不得不等待查詢來運行緩存項的過期循環。