2012-05-25 15 views
5

Quando ho bisogno di memorizzare nella cache qualcosa nella mia applicazione, ho scelto di scegliere Web.Caching.Cache. Ma mi sono imbattuto in un codice legacy che utilizza invece HttpApplicationState.Quando utilizzare HttpApplicationState anziché Web.Caching.Cache?

Poiché Web.Caching.Cache è più potente e flessibile (sembra MOLTO di più), esiste una situazione migliore per utilizzare HttpApplicationState ??

sarò molto grato se mi può mostrare alcuni esempi :-)

+0

Non utilizzo mai ApplicationState. Penso che sia più per il codice legacy (vecchi giorni ASP) – TGH

+0

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

+0

Sì, immagino sia ancora lì, ma non riesco a ricordare una volta che ho pensato di usarlo. Immagino che l'unico vantaggio che posso pensare sia che non scade mai ... – TGH

risposta

13

Sia HttpApplicationState e Web.Caching.Cache può essere utilizzata per memorizzare informazioni che possono essere l'accesso a livello globale in tutta l'applicazione ASP.Net. Tuttavia, hanno usi molto diversi.

HttpApplicationState viene utilizzato per archiviare i dati delle applicazioni che in genere non cambiano. Solitamente è popolato in Application_Start in global.asax, quando l'applicazione è in fase di avvio. Personalmente non l'ho usato molto, ma credo che sia tipicamente usato per archiviare piccoli pezzi di configurazione dell'applicazione che sono globali per tutti gli utenti di un'applicazione e che non cambiano o cambiano molto raramente. Qualcosa messo nello stato dell'applicazione rimarrà lì indefinitamente, fino a quando l'app non si ricicla. Ma quando ricicla e si riavvia nuovamente, Application_State verrà eseguito di nuovo e ri-popolare.

È importante notare che lo stato dell'applicazione è un singleton e non è thread-safe. Pertanto, quando si apportano modifiche, è necessario bloccare e sbloccare l'oggetto Applicazione tramite chiamate a Application.Lock() e Application.UnLock().

Esistono in realtà tre diversi modi in cui è possibile memorizzare nella cache il contenuto ASP.Net: livello di pagina, pagina parziale e dati. Parlerò del caching dei dati, poiché ritengo che sia più pertinente per la tua domanda. La cache ASP.Net viene utilizzata per archiviare grandi quantità di dati dell'applicazione che sarebbero costosi da recuperare da un archivio dati per ogni richiesta. Le principali differenze tra ApplicationState e Cache sono 1) I dati cache sono progettati per scadere ed essere eliminati dalla memoria da una varietà di trigger o condizioni (tempo, altre dipendenze della cache, ecc.), mentre ApplicationState sarà lì per sempre fino a quando l'app non ricicla e 2) I dati della cache possono essere eliminati dalla memoria se un server sta subendo una grave pressione di memoria, e quindi non posso mai contare sul fatto che sia lì e devo sempre provare per vedere se è presente, mentre ApplicationState sarà sempre lì.

La memorizzazione nella cache viene utilizzata per memorizzare i dati più vicini all'applicazione che non è necessario estrarre da un database a ogni richiesta. Il caching è progettato per memorizzare grandi quantità di dati e un'architettura di caching intelligente può avere un enorme impatto positivo sulle prestazioni.

+0

Ora sono abbastanza sicuro che potrei usare Cache invece di HttpApplicationState, grazie uomo – rhapsodyn

+5

Se stai usando .NET 4.0 o superiore puoi utilizzare System.Runtime.Caching.MemoryCache in un progetto ASP.NET o .NET. http://msdn.microsoft.com/en-us/library/dd997357.aspx – bounav

Problemi correlati