2010-03-16 4 views
5

Мне нужно создать List<object> и кешировать список и быть в состоянии добавить к нему. Мне также нужно уметь легко взорвать его и воссоздать. Что такое простой способ добиться этого?Простая реализация Cache ASP.NET 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

Ну ... исправный. Но я бы внес некоторые изменения. Прежде всего, я всегда возвращаю действительный список. Если этого не существует, создайте новую пустую коллекцию и кешируйте ее, а не просто возвращайте все, что находится в кеше [MyList], которое может быть нулевым. – Bryan

+0

Да, Брайан, этот пример довольно прост. - Но я принял ваше предложение близко к сердцу и обновил свой образец. Благодарю. – jessegavin

+0

Во многих сценариях реального мира вы хотите сбросить изменения в какое-то постоянное хранилище. – quillbreaker

2

Этот учебник является то, что я нашел, чтобы быть полезным

Вот пример

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

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

кэширования часть "Tracing and Caching Provider Wrappers for Entity Framework", в то время как не просто, по-прежнему довольно хороший обзор некоторых полезных вещей, чтобы думать о с кэшированием.

В частности, два класса InMemoryCache и AspNetCache и связанные с ними тесты:

подобно тому, что сделал этот вопрос, вы можете обернуть HttpRuntime.Cache или HttpContext.Current.Items или HttpContext.Current.Cache в исполнении ICache.