2011-10-28 15 views
8

Mi sono trovato in un CacheItem che non è stato pulito correttamente. Mentre guardando MSDN e mi correggere in mediante il calcolo Utc-based, ho trovato queste informazioni confuse:In che modo la cache "Priorità" e "AbsoluteExpiration" funzionano insieme?

AbsolutExpiration viene utilizzato per impostare un "keep-alive" di un CacheItem, Priority.NotRemovable viene utilizzato per forzare CacheItem per esistere per sempre. Nessuna notifica su quale proprietà sostituisce l'altra.

Il codice seguente compila e SQL Profiler conferma anche che il database viene interrogato solo una volta, mentre ogni altra richiesta proviene dalla cache.

CacheItemPolicy _cachePolicy = new CacheItemPolicy() 
{ 
    AbsoluteExpiration = new DateTimeOffset(DateTime.Now.AddHours(6)), 
    Priority = CacheItemPriority.NotRemovable 
}; 

presumo che questa forza di codice le voci della cache di rimanere per sempre, ma vengono cancellati dopo 12 ore dalla creazione, in linea con la nota del MSDN sull'impostazione.

"implementazioni cache deve impostare la priorità NotRemovable per una voce di cache solo se l'attuazione della cache fornisce modi per sfrattare voci dalla cache e per gestire il numero di voci di cache"

Poi il dall'altra parte, perché entrambe le proprietà dovrebbero funzionare insieme? L'implementazione porta una sorta di "più non rimovibile"?

+0

Mi stavo chiedendo anch'io grazie alla documentazione poco chiara. Nel mio caso vorrei che la voce della cache non venisse rimossa a meno che non scada per evitare che la cache effettui la pulizia sotto carico pesante prima della scadenza che ha colpito. –

risposta

5

Quindi in base a this "NotRemovable" impedisce che la voce della cache venga rimossa automaticamente (come quando la cache sta esaurendo lo spazio) ma verrà rimossa quando scade o viene estratta manualmente dalla cache.

NotRemovable Gli elementi della cache con questo livello di priorità non verranno cancellati automaticamente dalla cache del server libera la memoria di sistema. Tuttavia, gli elementi con questo livello di priorità vengono rimossi insieme ad altri elementi in base al tempo di scadenza assoluto o scorrevole dell'articolo.

+0

La tua risposta si riferisce a 'System.Web.Caching.CacheItemPriority', non a' System.Runtime.Caching.CacheItemPriority' che viene posta nella domanda. Si prega di modificare o rimuovere la risposta - questo è molto fuorviante. (Stavo guardando MSDN quando ho trovato la tua risposta, questa è l'unica ragione che ho notato). – xxbbcc

Problemi correlati