2012-06-07 12 views
37

Sto aggiungendo la memorizzazione nella cache a un'applicazione Web ASP.NET. Questo è .NET 4, quindi posso usare le classi nello spazio dei nomi System.Runtime.Caching (che, a quanto ho capito, è stato aggiunto per fornire funzionalità simili a quelle trovate in System.Web.Caching, ma per i non-Web app.)System.Web.Caching o System.Runtime.Caching è preferibile per un'applicazione Web .NET 4

Ma dal momento che questo è un'app Web, sto meglio utilizzando System.Web.Caching? Oppure il più recente System.Runtime.Caching è superiore in qualche modo?

risposta

40

Microsoft consiglia l'utilizzo di System.Runtime.Caching per tutti gli scopi di memorizzazione nella cache. Vedere questo: http://msdn.microsoft.com/en-us/library/dd997357.aspx

Anche se, ho incontrato un paio di thread in cui le persone hanno problemi con l'istanza MemoryCache.Default. Dopo un po ', smette di funzionare correttamente. Qualsiasi elemento aggiunto utilizzando il metodo Aggiungi o Imposta non viene effettivamente aggiunto alla cache. Ho provato lo stesso ed è stato in grado di riprodurre questo problema con esplicitamente chiamando il metodo MemoryCache.Default.Dispose().

ecco i link: MemoryCache Empty : Returns null after being set

http://forums.asp.net/t/1736572.aspx/1

La mia raccomandazione è di usare lo System.Web.Caching (HttpContext.Current.Cache)

UPDATE:

Questo problema è stato risolto dalla MS. Controllare la risposta accettata nel seguente messaggio: Runtime Cache Issue Resolved

+3

Big +1! Nota che Microsoft ha risolto il bug - vedi la risposta di Scott Hanselman alla domanda collegata sopra. – TrueWill

+2

Puoi aggiornare la tua risposta? Ho trovato questa domanda e la tua risposta, ma qualche ricerca in più mi ha detto che ora c'è una soluzione per farlo quindi Runtime.Caching è raccomandato ora :) –

+1

Aggiornamento della risposta per riflettere lo stato più recente. – dotnetster

11

System.Runtime.Caching consente di memorizzare nella cache tutte le app .Net, non solo il processo di lavoro IIS. Quindi se hai un requisito che accederà alla cache in più scenari, usa System.Runtime. Inoltre puoi controllare questo adattatore cache che ti permette di scambiare tra runtime, web e caching del fabric dell'app. https://bitbucket.org/glav/cacheadapter

Un'ultima cosa, se si dispone di una farm multi-server, con una configurazione con bilanciamento del carico, assicurarsi di avere sessioni appiccicose o un modello di cache distribuita.

+0

qualsiasi codice sorgente completo di esempio? – Kiquenet

Problemi correlati