2010-03-16 63 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