2010-03-16 61 views
5

我需要建立一個List<object>並緩存列表並能夠附加到它。我也需要能夠輕鬆地吹掉它並重新創建它。什麼是簡單的方法來完成這一點?簡單的C#ASP.NET緩存實現

+1

請記住您的列表不會是線程安全的。 – dugas

回答

15

像這樣的事情吧?

using System; 
using System.Collections.Generic; 
using System.Web; 

public class MyListCache 
{ 
    private List<object> _MyList = null; 
    public List<object> MyList { 
     get { 
      if (_MyList == null) { 
       _MyList = (HttpContext.Current.Cache["MyList"] as List<object>); 
       if (_MyList == null) { 
        _MyList = new List<object>(); 
        HttpContext.Current.Cache.Insert("MyList", _MyList); 
       } 
      } 
      return _MyList; 
     } 
     set { 
      HttpContext.Current.Cache.Insert("MyList", _MyList); 
     } 
    } 

    public void ClearList() { 
     HttpContext.Current.Cache.Remove("MyList"); 
    } 
} 

至於如何使用.....

// Get an instance 
var listCache = new MyListCache(); 

// Add something 
listCache.MyList.Add(someObject); 

// Enumerate 
foreach(var o in listCache.MyList) { 
    Console.WriteLine(o.ToString()); 
} 

// Blow it away 
listCache.ClearList(); 
+2

呃...有用。但我會做一些改變。首先,我總是會返回一個有效的列表。如果它不存在,則創建一個新的空集合並對其進行緩存,而不是隻返回Cache [「MyList」]中可能爲空的任何內容。 – Bryan

+0

是的Bryan,這個例子很簡單。 - 但我把你的建議放在心上,並更新了我的樣本。謝謝。 – jessegavin

+0

在許多/大多數真實世界的場景中,您需要刷新對某種持久性存儲的更改。 – quillbreaker

2

本教程是我發現是有幫助的

下面是一個簡單

List<object> list = new List<Object>(); 

Cache["ObjectList"] = list;     // add 
list = (List<object>) Cache["ObjectList"]; // retrieve 
Cache.Remove("ObjectList");     // remove