Esistono tre tipi di dipendenza:
- Con un'altro oggetto in cache
- Con un file o una directory
- Query su database
Per esempio, il codice seguente, creerà una dipendenza con un file XML.
Se il file verrà cambiato, cancellato o sovrascritto, l'oggetto in cache scadrà:
CacheDependency prodDependency = new CacheDependency(Server.MapPath("ProductList.xml"));
Cache.Insert("ProductInfo", prodInfo, prodDependency);
Se avessimo creato una dipendenza su una directory, l'oggetto CacheDependency avrebbe controllato se un file viene aggiunto, modificato, cancellato o se una sotto-directory viene rinominata, creata o rimossa.
I cambiamenti che occorranno un livello inferiore a quello della subdirectory (inserimento di un file in una subdirectory o la creazione di una subdirectory in una subdirectory), non verranno notificati.L'oggetto CacheDependency creato, inizierà la sua fase di controllo immediatamente, senza attendere che venga associato ad un oggetto in cache.
Più DipendenzePotrebbe tornare necessario un oggetto CacheDependency che dipende da più risorse (la modifica di due files decreta l'invalidità dell'oggetto in cache).
In questo caso avremo bisogno di creare un oggetto AggregateCacheDependency:CacheDependency dep1 = new CacheDependency(Server.MapPath("ProductList1.xml"));
CacheDependency dep2 = new CacheDependency(Server.MapPath("ProductList2.xml"));
CacheDependency[] deps = new CacheDependency[] { dep1, dep2 };
AggregateCacheDependency aggregateDep = new AggregateCacheDependency();
aggregateDep.Add(deps);
Cache.Insert("ProductInfo", prodInfo, aggregateDep);
Questo è soltanto un esempio, in quanto l'oggetto CacheDependency può accettare un array di files.
AggregateCacheDependency torna utile nel caso in cui gli oggetti da controllare non sono solamente files.
Riferendoci al post Data Caching, in questi casi torna utile l'utilizzo del delegate onRemoveCallback. Tramite questo delegate potremmo controllare perchè l'oggetto è stato rimosso, se perchè una delle sue dipendenze è cambiata o se per qualche altro motivo.
ASP.NET mette a disposizione l'enum CacheItemRemovedReason per capire perchè il nostro oggetto è stato rimosso dalla cache.
No comments:
Post a Comment