Erstellt der Zugriff auf MemoryCache eine Kopie?

8

Ich habe einen Cache-Service wie folgt:

%Vor%

Und so abgerufen:

%Vor%

Die Liste ist groß und wird häufig in einer Dropdown-Liste mit Tastenkombinationen aufgerufen. Und die Abfragebedingung ist auch dynamisch, wie

%Vor%

Ich frage mich, jedes Mal, wenn ich auf die Liste aus dem Cache zugreife, erstellt das System eine Kopie der Daten, bevor ich mit der Erstellung der linq-Abfrage beginne? Wenn ja, ist es wie Kopieren-pro-Tastenanschlag, nicht sehr effizient. Oder verschiebt es die Abfrage, weil ich AsQueryable abruft und linq erstelle?

Irgendwelche besseren Alternativen? Danke

    
Whoever 09.12.2014, 23:51
quelle

2 Antworten

11

Nein, MemoryCache erstellt keine Kopie. Sie speichern im Grunde eine Referenz auf eine Objektinstanz im Cache, und diese erhalten Sie zurück, wenn Sie auf ein Objekt im Cache zugreifen.

Ich habe keinen formellen Dokumentationslink, habe aber in der Praxis den "harten Weg" gefunden, wo ich versehentlich das zwischengespeicherte Objekt verändert habe, indem ich einfach die Referenz verwendet habe, die ich zurückbekommen habe (ohne es zu kopieren).

Auch das Studium der Referenzquellen ( Ссылка ) zeigt, dass kein automatisches Kopieren stattfindet.

Abhängig von Ihrer Anwendung und Ihren Anforderungen können Sie sichergehen, dass die Typen, die Sie zwischenspeichern, tatsächlich vom Design her unveränderlich sind.

    
Christian.K 10.12.2014, 12:22
quelle
4

Ohne sich in den Einzelheiten von MemoryCache zu verirren, können Sie dies mit den grundlegenden .NET-Designprinzipien begründen. Nur Werttypen sind einfach zu kopieren. Es gibt keinen allgemeinen Mechanismus zum Kopieren von Referenztypen, außer [Serializable] und der sehr fehlerhaften ICloneable. Dies sind keine Anforderungen für ein Objekt, das in den MemoryCache eingefügt werden soll. Also nein.

Das Cachen von Objekten ist sehr, sehr einfach. Eine einfache Liste & lt; & gt; erledigt diese Arbeit. Der Mehrwert, den Sie von MemoryCache erhalten, ist das andere wesentliche Merkmal eines effektiven Caches. Eine Ruhestandspolitik. Ein Cache ohne eine Richtlinie ist ein Speicherverlust.

    
Hans Passant 10.12.2014 00:23
quelle

Tags und Links