Generische Implementierung von System.Runtime.Caching.MemoryCache

8

Gibt es eine generische Alternative / Implementierung für MemoryCache?

Ich weiß, dass ein MemoryCache eine Hashtable unter der Haube verwendet, also würde es nur nötig sein, ein Dictionary & lt;, & gt; zu verwenden, was die generische Version einer Hashtable ist.

Dies würde Typsicherheit bieten und Leistungsvorteile wie kein Boxing / Unboxing bieten.

EDIT: Eine andere Sache, die mich interessiert, hat einen anderen Schlüsseltyp. Der Standardwert ist eine System.String.

    
caesay 13.06.2012, 15:46
quelle

2 Antworten

13
  

Gibt es eine generische Alternative / Implementierung für MemoryCache?

Nicht in der Basisklassenbibliothek. Sie müssten Ihre eigenen rollen, obwohl ich persönlich nur einen Wrapper um MemoryCache erstellen würde, der die API bereitstellt, die Sie wünschen.

  

Dies würde Typsicherheit bieten und Leistungsvorteile wie kein Boxen / Unboxing bieten

Die Typensicherheit kann in einer Wrapper-Klasse relativ einfach gehandhabt werden. Das Boxen / Unboxing wäre nur ein Problem, wenn Sie Werttypen (keine Klassen) speichern würden, und selbst dann wäre es wahrscheinlich minimal, da es unwahrscheinlich ist, dass Sie oft genug aus dem Cache ziehen und ziehen, um eine echte Leistung zu erzielen Problem.

Was Typ Sicherheit und Benutzerfreundlichkeit angeht, habe ich meine eigenen Methoden geschrieben, um die Aufrufe von MemoryCache item in eine generische Methode zu packen, was eine etwas nettere Verwendung aus Sicht der API ermöglicht. Dies ist sehr einfach - erfordert normalerweise nur eine Methode wie:

%Vor%

Sie können auch eine Methode zum Festlegen von Werten auf die gleiche Weise erstellen.

  

EDIT: Eine andere Sache, die mich interessiert, hat einen anderen Schlüsseltyp. Der Standardwert ist eine System.String.

Dies wird nicht direkt mit MemoryCache unterstützt, es würde also einiges an Arbeit erfordern, um eine eigene Schlüsselgenerierung zu erstellen. Eine Option wäre, einen typsicheren Wrapper zu erstellen, der auch einen Func<T, string> liefert, um basierend auf Ihrem Wert einen String-Schlüssel zu generieren, mit dem Sie einen Cache-Eintrag für jeden Typ T erzeugen können. Sie müssen natürlich vorsichtig sein, alle Daten in die Zeichenfolge aufzunehmen, die Sie als Teil Ihres Vergleichs verwenden möchten.

    
Reed Copsey 13.06.2012, 15:53
quelle
-1

Ich habe meins geschrieben, FWIW:

Ссылка (link dead)

Hier gibt es eine Abzweigung des ursprünglichen Codes:

Ссылка

    
YSharp 25.08.2015 18:44
quelle

Tags und Links