2010-03-16 8 views

Répondre

15

Quelque chose comme ça peut-être?

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

En ce qui concerne l'utilisation de .....

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

Eh bien ... réparable. Mais je ferais quelques changements. Principalement, je retournerais toujours une liste valide. S'il n'existe pas, créez une nouvelle collection vide et mettez-la en cache, plutôt que de simplement renvoyer tout ce qui est dans Cache ["MyList"], qui peut être nul. – Bryan

+0

Oui Bryan, cet exemple est assez simple. - Mais j'ai pris votre suggestion à coeur et mis à jour mon échantillon. Merci. – jessegavin

+0

Dans la plupart des cas/scénarios les plus réalistes, vous devez vider les modifications vers un type de stockage persistant. – quillbreaker

2

Ce tutoriel est ce que je trouve être utile

Voici un échantillon

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

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

Les parties de mise en cache de "Tracing and Caching Provider Wrappers for Entity Framework", alors pas simple, encore un très bon examen de certaines choses utiles à penser avec la mise en cache.

Plus précisément, les deux classes InMemoryCache et AspNetCache et leurs tests associés:

similaires à ce que la question a fait, vous pouvez envelopper HttpRuntime.Cache ou HttpContext.Current.Items ou HttpContext.Current.Cache dans une implémentation de ICache.