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.

War es hilfreich?

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.).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top