2010-03-16 9 views
5

Ich muss eine List<object> aufbauen und die Liste zwischenspeichern und in der Lage sein, daran anzufügen. Ich muss es auch einfach wegblasen und neu erschaffen können. Was ist ein einfacher Weg, dies zu erreichen? Dieses TutorialEinfache C# ASP.NET-Cache-Implementierung

+1

Denken Sie daran, dass Ihre Liste nicht threadsicher ist. – dugas

Antwort

15

So etwas wie dieses vielleicht?

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

Was, wie ..... verwenden

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

Gut ... brauchbar. Aber ich würde einige Änderungen vornehmen. In erster Linie würde ich immer eine gültige Liste zurückgeben. Wenn es nicht existiert, erstellen Sie eine neue leere Sammlung und cachen Sie sie, anstatt nur den Inhalt von Cache ["MeineListe"] zurückzugeben, der null sein könnte. – Bryan

+0

Ja Bryan, dieses Beispiel ist ziemlich einfach. - Aber ich habe Ihren Vorschlag beherzigt und meine Probe aktualisiert. Vielen Dank. – jessegavin

+0

In vielen/meisten realen Szenarien werden Sie Änderungen in einer Art persistenten Speicher ablegen wollen. – quillbreaker

2

ist, was ich hilfreich sein gefunden

Hier ist ein Beispiel

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

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

Die Caching-Teile "Tracing and Caching Provider Wrappers for Entity Framework", die zwar nicht einfach, sind immer noch eine ziemlich gute Übersicht über einige nützliche Dinge über mit Caching zu denken.

Insbesondere die beiden Klassen InMemoryCache und AspNetCache und die dazugehörigen Tests:

Ähnlich wie die Frage tat, könnten Sie wickeln HttpRuntime.Cache oder HttpContext.Current.Items oder HttpContext.Current.Cache in einer Implementierung von ICache.