wake-up-neo.com

Vor- / Nachteile verschiedener ASP.NET-Caching-Optionen

Ich habe kürzlich eine Frage zum Zwischenspeichern von Anwendungsdaten in einer ASP.NET MVC-WebAPI-Anwendung gestellt, die mich zu einer neuen Frage geführt hat. Welche Vor- und Nachteile bieten verschiedene in ASP.NET verfügbare Caching-Methoden?

Ich bin auf gekommen:

  • Speicher-Cache

    http://msdn.Microsoft.com/en-us/library/system.runtime.caching.memorycache.aspx

  • Verwenden von statischen Elementvariablen:

    private static Northwind.SuppliersDataTable suppliers = null;
    
  • Anwendungsstatus:

     HttpContext.Current.Application["key"] ="Value"
    
  • Datencache:

    HttpRuntime.Cache.Insert(
      /* key */                "key", 
      /* value */              "value", 
      /* dependencies */       null, 
      /* absoluteExpiration */ Cache.NoAbsoluteExpiration, 
      /* slidingExpiration */  Cache.NoSlidingExpiration, 
      /* priority */           CacheItemPriority.NotRemovable, 
      /* onRemoveCallback */   null);
    

Ich bin sicher, dass es andere gibt, und ich weiß, dass sie alle die Daten technisch im Speicher speichern ... also eine Idee, was ich für eine ASP.NET MVC-Webapi verwenden sollte?

Meine vorherige Frage: Zwischenspeichern von Anwendungsdaten im Speicher: MVC Web API

55
vesuvious

Jede Caching-Technologie/Methode hat ihre eigenen Funktionen. Diese Merkmale können in einer Anwendung als nachteilig erscheinen, in anderen Anwendungen als vorteilhaft.

Kurz gesagt, entscheiden Sie je nach Ihren Anforderungen, welche Caching-Technologie und welche Funktionen für Sie am besten geeignet sind.

For example, Let us discuss some client side Caching techniques.

Laut MSDN können wir HiddenField auch verwenden, um nur kleine Mengen häufig wechselnder Daten in ausgeblendeten Feldern zu speichern, da diese Daten bei jedem Postback in den Roundtrips zum Server enthalten sind.

Vorteil dieser Funktion: Reduziert die Arbeitslast auf Ihrem Server, indem Seiteninformationen mithilfe clientseitiger Optionen gespeichert werden .

MSDN stellt jedoch klar: Dieser Ansatz bietet nur minimale Sicherheitsunterstützung.

Daher kann dieses Merkmal immer verwendet werden oder nicht, da auch Sicherheitsüberlegungen vorhanden sind.

Consider one more example, Page Output caching: Es gibt zwei Arten, Seitenausgabe-Caching und Seitenfragment-Caching.

Durch das Zwischenspeichern der Seitenausgabe wird eine gesamte Webseite zwischengespeichert. Dies ist nur dann sinnvoll, wenn der Inhalt dieser Seite ziemlich statisch ist. Wenn sich Teile der Seite ändern, können Sie die statischen Abschnitte als Benutzersteuerelemente umbrechen und die Benutzersteuerelemente mithilfe der Seitenfragment-Zwischenspeicherung zwischenspeichern.

And one last comment onApplication vs HttpRuntime.cache:

Application ist kein Cache, sondern eine globale Sammlung benannter Werte. Wenn Sie ein Objekt zu Application hinzufügen, bleibt es so lange bestehen, bis eine Appdomain wiederverwendet wird.

  • Anwendungsvariablen sind gemeinsam genutzte Variablen für alle Benutzer einer Webanwendung
  • Anwendungsvariablen verhalten sich wie statische Variablen und ersetzen statische Variablen, da statische Variablen in Webanwendungen keinen Status haben
  • In Anwendungsvariablen sollten nur gemeinsame Werte beibehalten werden. Sobald sie nicht verwendet werden, sollten sie explizit entfernt werden.

Cache: In ASP.NET-Anwendungen können erhebliche Leistungsverbesserungen erzielt werden, indem häufig angeforderte Objekte und Daten in den Klassen Application oder Cache zwischengespeichert werden. Während die Klasse Cache zweifellos weitaus mehr Flexibilität und Kontrolle bietet, scheint sie nur einen geringfügigen Vorteil hinsichtlich des höheren Durchsatzes gegenüber der Klasse Application für das Caching zu bieten. Es wäre sehr schwierig, ein Testschema zu entwickeln, mit dem die potenziellen Vorteile der in der Klasse Cache integrierten Verwaltung von weniger genutzten Objekten durch den Bereinigungsprozess genau gemessen werden können, im Gegensatz zu der Tatsache, dass Application dies nicht bietet Feature. Der Entwickler muss in diesem Fall eine Entscheidung treffen und sollte sich an den Erfordernissen und der Zweckmäßigkeit des Projekts und seinen Verwendungsmustern orientieren. Überprüfen Sie diesen Link für mehr.

Unter dieser MSDN-Artikel finden Sie eine umfassende Erläuterung aller Caching-Technologien in Asp.net mit Diskussion über die Eigenschaften jeder Technologie.

Auch diese 2 Links sind eine großartige Quelle für den Anfang:

34
R.C

In Bezug auf MemoryCache vs ASP.NET Cache: Sie bieten eine sehr ähnliche Funktionalität. In einer ASP.NET 4-Anwendung würde ich im Allgemeinen den ASP.NET-Cache vorziehen, wenn nicht aus einem anderen Grund, dann wegen ein Fehler in .NET 4 , der anscheinend in .NET 4.5 behoben ist .

Statische Felder eignen sich zum Speichern freigegebener Daten, für die keine Ablaufrichtlinie erforderlich ist.

Der Anwendungsstatus ist nicht viel mehr als ein statisches Wörterbuch mit Sperrsemantik, das mit klassischem ASP kompatibel ist. Ich würde es nur aus Gründen der Abwärtskompatibilität mit altem klassischem ASP Code verwenden.

10
Joe

Wenn Sie die Web-API verwenden, sollten Sie als erste Wahl für das Caching immer die Caching-Header in der HTTP-Antwort festlegen. HttpResponseMessage.CacheControlHeader.

Ihre letzten Optionen sollten alles sein, was von HttpContext oder HttpRuntime abhängt, da dies Sie an bestimmte Hosts binden wird. Web-API-Anwendungen sollten unabhängig von ihrem Host erstellt werden.

4
Darrel Miller