Was ist der Unterschied zwischen dem httpruntime -Cache und dem HttpContext -Cache?
-
12-09-2019 - |
Frage
Ich weiß, dass es eine sehr ähnliche Frage gibt hier Aber ich hatte gehofft, eine bessere Explination zu bekommen. Warum sollte ich jemals httpcontext.cache anstelle von httpruntime.cache verwenden, wenn der httpcontext wirklich die httpruntime.cache hinter den Kulissen verwendet?
Im Artikel Simulieren Sie einen Windows -Dienst mit ASP.NET, um geplante Jobs auszuführen Omar verwendet den httpcontext, um seine Cache -Artikel zu speichern, aber als Jeff Atwood ihn implementiert hat hier Er entschied sich stattdessen für die HTTPruntime. In dieser speziellen Situation ist es natürlich sinnvoll, da Sie keine Webanforderung durchführen müssen, um das Cache -Element wieder in den HTTPContext hinzuzufügen.
Ich suche jedoch nach guten Hinweisen darauf, wann man gegen den anderen verwendet wird.
Lösung
Es ist wirklich nur am Ende der gleiche Cache, nur am Ende HttpContext.Current
kann manchmal null sein (wenn nicht in einem Webkontext oder in einem Webkontext, aber noch nicht konstruiert). Sie wären immer sicher zu benutzen HttpRuntime.Cache
.
Andere Tipps
Wenn Sie sich auf einer regulären Webseite befinden, können Sie sicher verwenden HttpContext.Cache
oder nur das Cache
Eigenschaft der Seite.
Wenn Sie etwas tun, das sich nicht auf einer Seite befindet, müssen Sie häufig verwenden HttpRuntime.Cache
Um sicher Zugang dazu zu bekommen.
In einigen Fällen können Sie wissen, ob es einen HTTP -Kontext gibt oder nicht. Wenn Sie beispielsweise einen separaten Thread von einer Webseite starten, hat dieser Thread keinen HTTP -Kontext. In anderen Fällen haben Sie manchmal einen HTTP -Kontext, wie in der Application_Start
Methode in global.asax
, da die Anwendung möglicherweise nicht immer gestartet wird, da es eine Anfrage gibt.
Ich finde es auch irreführend, obwohl wir alle wissen, dass es nur zurückkehrt HttpRuntime.Cache
im Inneren. Auch die httpruntime ist eine schlechte Entscheidung, den Cache zu enthüllen, denke ich.
Jeder ist wie Session
IS Session-Level-Cache und der Cache, über den wir sprechen, ist Anwendungsebene. Ich würde lieber haben zu haben Application.Cache
als der Cache, den wir heute verwenden und HttpContext.Cache
sich auf das beziehen, was als bekannt ist wie HttpContext.Items
.
Wenn wir Ihre Frage beantworten, sollten wir uns alle an die httpruntime.cache halten, die unseren Code klarer macht, auch wenn wir verschiedene Möglichkeiten haben, darauf zuzugreifen. Und wenn Sie ernsthaft planen, es zu verwenden, sollten Sie Ihre eigene API besser einwickeln und das intern anrufen lassen HttpRuntime's
oder eine andere Cache -Implementierung (Entlib, Geschwindigkeit usw.).