267 messaggi dal 29 settembre 2009
Ciao a tutti, ho letto questo articolo sulla cache

http://www.aspitalia.com/articoli/asp.net/cache-p-2.aspx e sinceramente non ho capito molto bene il seguente concetto

gestione del blocco di istruzioni. Con l'oggetto Application si presentava un problema molto importante relativo all'accesso ai valori contenuti in esso: per evitare che più utenti modifichino contemporaneamente un valore della collezione, dando risultati non previsti, si utilizzano le istruzioni Lock e Unlock. Con l'oggetto Cache questo lavoro viene compiuto dalla classe stessa in maniera trasparente;


in che modo è trsparente l'accesso esclusivo agli oggetti contenuti in cache ? se io scrivo questo
        public static string Take(string resource)
        {
             Cache _cache = HttpContext.Current.Cache;

             WebResource webresource = 
                 _cache[resource] != null ? (WebResource)_cache[resource] : (WebResource)(_cache[resource] = new WebResource(resource));

             webresource.AddUserRequest();

             return webresource.Service();
             
        }


come fa la cache a garantirmi che la chiamata al metodo statico Take
non mi sovrascriva una risorse già presente in cache (vedi istruzione condizionale) ?

sono sicuro che le operazioni webresource.AddUserRequest(); e webresource.Service(); vengono eseguite in modo esclusivo sui rispettivi oggetti di cache ?
Modificato da claudio_dg il 25 febbraio 2012 10.47 -
claudio_dg wrote:
in che modo è trsparente l'accesso esclusivo agli oggetti contenuti in cache ?

usando un blocco: se qualcun'altro tenta di modificare il dato, non potrà farlo finché una modifica precendente è in pending.

come fa la cache a garantirmi che la chiamata al metodo statico Take non mi sovrascriva una risorse già presente in cache (vedi istruzione condizionale) ?

non lo fa: ti assicura solo che le scritture siano successive. per questo, per evitare race condition, in genere si usa questo pattern: http://www.aspitalia.com/script/1036/Evitare-Race-Condition-Scrittura-Cache-ASP.NET.aspx .

Daniele Bochicchio | ASPItalia.com | Libri
Chief Operating Officer@iCubed
Microsoft Regional Director & MVP
267 messaggi dal 29 settembre 2009
Ok questo lo userò per la prossima volta :)

per ora ho risolto con il lock delle variabili application anche se ho letto che hanno problemi di scalabilità

Ciao

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.