2011-08-31 8 views
39

ho appena incontrato il MemoryCache che è nuova in .NET 4.Quali sono i motivi validi per utilizzare un MemoryCache su una pianura vecchio dizionario <string, object>

ottengo che può essere utile se si vogliono:

  • limitare l'utilizzo totale della memoria della cache
  • hanno un tempo di scadenza oggetto (time to live) per gli oggetti che hai messo nella cache

ci sono eventuali ot i suoi convincenti motivi per usare un MemoryCache su uno standard Dictionary<string,object>

Ho alcuni libri su C# e su .NET e non vi è alcun riferimento ad esso ovunque.

+0

Sono confuso. Come dovrebbe essere conservato un 'dizionario ' in memoria? –

+0

@ColinPear static –

risposta

33

penso che si inchiodato i due motivi validi :-)

Il MemoryCache ha una strategia di eliminazione, in modo che possa buttare fuori le voci che non sono più necessari o per quella non si dispone più di memoria sufficiente.

Un dizionario non "perde contenuto".

Aggiornamento: MemoryCache è thread-safe e ha metodi come AddOrGetExisting. Con un dizionario, dovresti sincronizzare l'accesso da solo (o usare ConcurrentDictionary).

+0

Sì, questa idea di sgombero sembra interessante - lo vedo impostando [CacheItemPolicy] (http://msdn.microsoft.com/en-us/library/system.runtime.caching.cacheitempolicy.aspx) su un elemento puoi aggiungere uno SlidingExpiration (sfrattato se non è stato effettuato l'accesso in un dato intervallo di tempo) o puoi aggiungere anche altre condizioni personalizzate, come un file sul disco che viene modificato. –

+0

L'unica caratteristica che mi manca in MemoryCache è il salvataggio/caricamento dal file. – Tomas

+3

'ConcurrentDictionary' è anche thread-safe .. :) – TryingToImprove

Problemi correlati