2011-12-22 17 views
5

sto usando la nuova libreria System.Runtime.Caching per il caching nella mia domanda, e ha definito come segue nel App.config:System.Runtime.Caching non rilascia BitmapImage oggetti

<system.runtime.caching> 
    <memoryCache> 
     <namedCaches> 
      <add name="MyCache" cacheMemoryLimitMegabytes="10" 
       physicalMemoryLimitPercentage="30" pollingInterval="00:00:10" /> 
     </namedCaches> 
    </memoryCache> 
</system.runtime.caching> 

poi, dal codice ho un'istanza in questo modo: _cache = new MemoryCache("MyCache");

e aggiungere voci in questo modo: _cache.Add(resourceName, resource, new CacheItemPolicy());

io uso questa cache per memorizzare BitmapImage oggetti, e per assicurarsi che la cache funzioni correttamente, ho aggiunto dieci BitmapImage oggetti nella cache, ognuno con un'immagine di circa 7 MB. Ho quindi aspettato dieci secondi per il polling e controllato le voci nella cache, ma erano tutte lì. Non un singolo oggetto è stato sfrattato.

Sto facendo qualcosa di sbagliato qui? So che le impostazioni vengono lette correttamente da App.config. È possibile che le istanze BitmapImage siano piccole e fanno riferimento solo all'immagine sul disco? E in che modo la cache determina quale è la dimensione dell'oggetto?

risposta

3

Questo perché si sta aggiungendo alla cache con

new CacheItemPolicy() 

Questo sovrascriverà i valori e darvi le impostazioni di default, che è un absoluteExpiration del 31/12/9999 23:59:59 00 : 00

di farlo per 10 minuti si hanno 2 opzioni

CacheItemPolicy item = new CacheItemPolicy(); 

item.SlidingExpiration = new TimeSpan(0, 10, 0); 

o

item.AbsoluteExpiration = DateTime.Now.AddMinutes(10); 

Se si sceglie la scadenza di scorrimento, i 10 minuti verranno ripristinati se si aggiorna l'oggetto.

+0

Ho provato questo con 'char []', e gli oggetti sono stati sfrattati anche se ho usato 'new CacheItemPolicy()'. In ogni caso, per aggiungere un elemento alla cache, devo fornire un parametro 'CacheItemPolicy'. Che valore ho bisogno di passare poi per ottenere il comportamento richiesto? –

+0

Aggiornato la mia risposta –

+0

Questo ancora non mi dà il comportamento richiesto. Non voglio impostare in modo esplicito l'ora in cui gli elementi scadranno, ma voglio che scadano se il limite di memoria, come definito in 'app.config', è stato superato. Inoltre, sono abbastanza sicuro che tu abbia torto sugli articoli scadenti al 31/12/9999 11:59:59 PM +00: 00, perché come ho detto nel mio commento sopra, ho fatto scadere gli articoli anche quando ho li ha aggiunti con la politica 'new CacheItemPolicy()'. –

Problemi correlati