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?
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? –
Aggiornato la mia risposta –
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()'. –