2010-03-16 18 views

Odpowiedz

15

Coś takiego może być?

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"); 
    } 
} 

chodzi o sposób korzystania .....

// 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

Cóż ... przydatny. Ale wprowadziłbym pewne zmiany. Przede wszystkim zawsze zwracam prawidłową listę. Jeśli nie istnieje, utwórz nową pustą kolekcję i zapisz ją w pamięci podręcznej, zamiast zwracać tylko to, co jest w pamięci podręcznej ["MyList"], które może mieć wartość zerową. – Bryan

+0

Tak Bryan, ten przykład jest dość prosty. - Ale wziąłem twoją sugestię do serca i zaktualizowałem moją próbkę. Dzięki. – jessegavin

+0

W wielu/najbardziej rzeczywistych scenariuszach będziesz chciał opróżnić zmiany do pewnego rodzaju trwałego przechowywania. – quillbreaker

2

Ten Tutorial jest to, co okaże się pomocne

Oto próbka

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

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

Części buforowanie "Tracing and Caching Provider Wrappers for Entity Framework", podczas gdy nie jest proste, są nadal dość dobry przegląd niektórych przydatnych rzeczy do przemyślenia z buforowania.

Konkretnie dwie klasy InMemoryCache i AspNetCache i związane z nimi testy:

podobny do tego kwestia zrobił, można owinąć HttpRuntime.Cache lub HttpContext.Current.Items lub HttpContext.Current.Cache w implementacji ICache.

Powiązane problemy