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.
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:
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.
Tags und Links optimization c# generics caching