2011-05-12 142 views
32

我知道.NET 4 Framework內置了緩存支持。有沒有人有任何這方面的經驗,或可以提供很好的資源,以瞭解更多關於此?.NET 4緩存支持

我指的是緩存內存中的對象(主要是實體),並可能使用System.Runtime.Caching。

+10

緩存什麼?你是指實體框架,WCF還是應用服務器? – weismat

+0

'System.Runtime.Caching'顯然;-) – Jodrell

+0

如果您尚未升級到.NET 4.5,則應該瞭解以下錯誤:http://stackoverflow.com/a/15715990/13087 – Joe

回答

2

希望你是指System.Runtime.Caching .Netframework的4.0

下面的鏈接是很好的起點: Here

15

我沒有利用它自己,但如果你」只是在內存中緩存簡單對象,你可能指的是System.Runtime.Caching命名空間中的MemoryCache類。有一個如何在頁面末尾使用它的小例子。

編輯:爲了讓它看起來像我已經爲這個答案實際做了一些工作,這裏是該頁面的示例! :)

private void btnGet_Click(object sender, EventArgs e) 
{ 
    ObjectCache cache = MemoryCache.Default; 
    string fileContents = cache["filecontents"] as string; 

    if (fileContents == null) 
    { 
     CacheItemPolicy policy = new CacheItemPolicy(); 

     List<string> filePaths = new List<string>(); 
     filePaths.Add("c:\\cache\\example.txt"); 

     policy.ChangeMonitors.Add(new 
     HostFileChangeMonitor(filePaths)); 

     // Fetch the file contents. 
     fileContents = 
      File.ReadAllText("c:\\cache\\example.txt"); 

     cache.Set("filecontents", fileContents, policy); 
    } 

    Label1.Text = fileContents; 
} 

這很有趣,因爲它表明你可以申請依賴於緩存,很像經典的ASP.NET緩存。這裏最大的區別是你沒有對System.Web程序集的依賴。

+1

我已經使用這個,發現文檔缺乏。這是我的理解,你可以使用它基本上相同,你會System.Web緩存。 – goalie7960

4

的MemoryCache的框架是一個良好的開端,但你可能還喜歡考慮LazyCache,因爲它具有比內存緩存簡單的API,並內置鎖定以及其他一些不錯的功能。它可用於的NuGet:PM> Install-Package LazyCache

// Create our cache service using the defaults (Dependency injection ready). 
// Uses MemoryCache.Default as default so cache is shared between instances 
IAppCache cache = new CachingService(); 

// Declare (but don't execute) a func/delegate whose result we want to cache 
Func<ComplexObjects> complexObjectFactory =() => methodThatTakesTimeOrResources(); 

// Get our ComplexObjects from the cache, or build them in the factory func 
// and cache the results for next time under the given key 
ComplexObject cachedResults = cache.GetOrAdd("uniqueKey", complexObjectFactory); 

我最近寫了一篇關於getting started with caching in dot net,你會發現有用的這篇文章。

(聲明:我是LazyCache的作者)