2012-05-25 19 views
5

Wenn ich etwas in meiner Anwendung zwischenspeichern muss, wählte ich Web.Caching.Cache. Aber ich stieß auf älteren Code, der stattdessen HttpApplicationState verwendet.Wann sollte HttpApplicationState anstelle von Web.Caching.Cache verwendet werden?

Da Web.Caching.Cache ist leistungsfähiger und flexibler (scheint viel mehr), gibt es eine Situation, die besser zu verwenden HttpApplicationState?

Ich schätze werden sehr, wenn Sie mir ein paar Beispiele :-)

+0

Ich verwende nie ApplicationState. Ich denke, es ist mehr für Legacy-Code (alte ASP Tage) – TGH

+0

@TGH http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspx noch in 4.0 man – rhapsodyn

+0

Ja, ich denke, es ist immer noch da, aber ich kann mich nicht an eine Zeit erinnern, die ich in Betracht gezogen habe, sie zu benutzen. Ich denke, der einzige Vorteil, den ich mir vorstellen kann, ist, dass es nie abläuft .... – TGH

Antwort

13

Sowohl Httpapplicationstate und Web.Caching.Cache verwendet werden können, zeigen können, um Informationen zu speichern, die weltweit Zugang in einer ASP.Net-Anwendung sein kann. Sie haben jedoch sehr unterschiedliche Verwendungszwecke.

HttpApplicationState wird zum Speichern von Anwendungsdaten verwendet, die sich normalerweise nicht ändern. Es wird normalerweise in Application_Start in global.asax gefüllt, wenn die Anwendung gestartet wird. Ich persönlich habe es nicht oft verwendet, aber ich glaube, es wird normalerweise verwendet, um kleine Teile der Anwendungskonfiguration zu speichern, die für alle Benutzer einer Anwendung global sind und sich entweder nicht sehr selten ändern oder ändern. Etwas, das in den Anwendungsstatus versetzt wird, bleibt dort unbegrenzt, bis die App wiederverwendet wird. Wenn es jedoch wiederverwendet und erneut gestartet wird, wird Application_State erneut ausgeführt und erneut ausgefüllt.

Es ist wichtig zu beachten, dass der Anwendungsstatus ein Singleton ist und nicht threadsicher ist. Wenn Sie Änderungen daran vornehmen, müssen Sie das Application-Objekt über Aufrufe von Application.Lock() und Application.UnLock() sperren und entsperren.

Es gibt tatsächlich drei verschiedene Möglichkeiten, wie Sie ASP.Net Inhalte cachen: Seite Ebene, Teilseite und Daten. Ich werde über Daten-Caching sprechen, da ich denke, dass das für Sie am relevantesten ist. Der ASP.Net-Cache wird zum Speichern großer Mengen von Anwendungsdaten verwendet, die für jede Anforderung aus einem Datenspeicher teuer abgerufen werden können. Die Hauptunterschiede zwischen ApplicationState und Cache sind: 1) Cache-Daten sind so konzipiert, dass sie ablaufen und aus dem Speicher gelöscht werden durch eine Vielzahl von Auslösern oder Bedingungen (Zeit, andere Cache-Abhängigkeiten, usw.), während ApplicationState für immer da ist, bis die App recycelt, und 2) Cache-Daten können aus dem Speicher gelöscht werden, wenn ein Server starken Speicherdruck erfährt kann nie darauf zählen, dass es da ist und muss immer testen, ob es vorhanden ist, während ApplicationState immer da ist.

Caching wird verwendet, um Daten in der Nähe der Anwendung zu speichern, die nicht bei jeder Anforderung aus einer Datenbank abgerufen werden müssen. Caching ist dafür ausgelegt, sehr große Datenmengen zu speichern, und eine intelligente Caching-Architektur kann sich enorm positiv auf die Leistung auswirken.

+0

Jetzt bin ich mir ziemlich sicher, dass ich Cache anstelle von HttpApplicationState verwenden konnte, danke Mann – rhapsodyn

+5

Wenn Sie .NET 4.0 oder höher verwenden, können Sie Verwenden Sie einen System.Runtime.Caching.MemoryCache in einem ASP.NET- oder einem .NET-Projekt. http://msdn.microsoft.com/en-us/library/dd997357.aspx – bounav

Verwandte Themen