2012-05-25 13 views
5

Gdy potrzebuję buforować coś w mojej aplikacji, wybrałem Web.Caching.Cache. Ale wpadłem na jakiś starszy kod, który zamiast tego używał HttpApplicationState.Kiedy używać HttpApplicationState zamiast Web.Caching.Cache?

Ponieważ Web.Caching.Cache jest bardziej wydajny i elastyczny (wydaje DUŻO więcej), czy jest sytuacja, w której lepiej używać HttpApplicationState?

Będę bardzo wdzięczny, jeśli możesz mi pokazać kilka przykładów :-)

+0

Nigdy nie używam ApplicationState. Myślę, że jest to bardziej dla starego kodu (stare ASP dni) – TGH

+0

@TGH http://msdn.microsoft.com/en-us/library/system.web.httpapplicationstate.aspx nadal w 4.0 człowiek – rhapsodyn

+0

Tak, myślę, że nadal tam jest, ale nie pamiętam czasu, w którym rozważałem jego użycie. Sądzę, że jedyną korzyścią, o której mogę myśleć, jest to, że nigdy nie wygasa .... – TGH

Odpowiedz

13

Zarówno HttpApplicationState i Web.Caching.Cache może być używany do przechowywania informacji, które mogą być globalnie dostęp do całej aplikacji ASP.NET. Mają jednak bardzo różne zastosowania.

HttpApplicationState służy do przechowywania danych aplikacji, które zwykle się nie zmieniają. Zwykle jest zapełniany w Application_Start w global.asax, gdy aplikacja się uruchamia. Osobiście nie używałem go zbyt wiele, ale uważam, że zazwyczaj jest używany do przechowywania małych elementów konfiguracji aplikacji, które są globalne dla wszystkich użytkowników aplikacji i które nie zmieniają się ani nie zmieniają się bardzo rzadko. Coś wprowadzone w stan aplikacji pozostanie tam przez czas nieokreślony, aż aplikacja odzyska. Ale gdy ponownie uruchomi się i ponownie uruchomi, Application_State wykona ponownie i ponownie zapełni.

Należy zauważyć, że stan aplikacji jest jednolity i nie jest bezpieczny dla wątków. Dlatego po wprowadzeniu w nim zmian należy zablokować i odblokować obiekt aplikacji za pomocą wywołań Application.Lock() i Application.UnLock().

Istnieją trzy różne sposoby buforowania treści ASP.Net: poziom strony, częściowa strona i dane. Mam zamiar mówić o buforowaniu danych, ponieważ uważam, że jest to najbardziej istotne dla ciebie pytanie. Pamięć podręczna ASP.Net jest używana do przechowywania dużych ilości danych aplikacji, które byłyby kosztowne do pobrania z magazynu danych dla każdego żądania. Kluczowe różnice między ApplicationState i Cache to 1) Dane pamięci podręcznej mają wygasnąć i zostać usunięte z pamięci przez różne wyzwalacze lub warunki (czas, inne zależności z pamięcią podręczną, itp.), podczas gdy ApplicationState będzie tam na zawsze, aż aplikacja odzyska i 2) Dane pamięci podręcznej mogą być usunięte z pamięci, jeśli serwer doświadcza silnego nacisku pamięci, a zatem nigdy nie może liczyć na to, że on tam jest i musi zawsze sprawdzać, czy jest obecny, podczas gdy ApplicationState zawsze tam będzie.

Buforowanie służy do przechowywania danych w pobliżu aplikacji, które nie muszą być pobierane z bazy danych przy każdym żądaniu. Buforowanie jest przeznaczone do przechowywania bardzo dużych ilości danych, a inteligentna architektura buforowania może mieć ogromny pozytywny wpływ na wydajność.

+0

Teraz jestem prawie pewien, że mógłbym użyć Cache zamiast HttpApplicationState, dziękuję człowieku – rhapsodyn

+5

Jeśli używasz .NET 4.0 lub nowszego możesz użyj pliku System.Runtime.Caching.MemoryCache w projekcie ASP.NET lub .NET. http://msdn.microsoft.com/en-us/library/dd997357.aspx – bounav

Powiązane problemy