Condividi tramite


Cenni preliminari sull'inserimento nella cache in ASP.NET

Aggiornamento: novembre 2007

Spesso le prestazioni di un'applicazione possono essere migliorate archiviando n memoria dati a cui si accede frequentemente e la cui creazione richiede tempi di elaborazione significativi. Se, ad esempio, l'applicazione elabora grandi quantità di dati utilizzando una logica complessa, quindi li restituisce sotto forma di report a cui gli utenti accedono frequentemente, è utile evitare di ricreare il report ogni volta che un utente lo richiede. In modo analogo, se l'applicazione include una pagina che elabora dati complessi ma che viene aggiornata molto raramente, sarebbe poco efficace per il server ricreare quella pagina a ogni richiesta.

Per facilitare il miglioramento delle prestazioni dell'applicazione in tali situazioni, ASP.NET fornisce la funzionalità di inserimento nella cache tramite due meccanismi di base. Il primo è la memorizzazione nella cache delle applicazioni ASP.NET, che consente di memorizzare nella cache i dati generati, come, ad esempio, DataSet o un oggetto business del report personalizzato. Il secondo è la memorizzazione nella cache dell'output della pagina, che consente di salvare l'output dell'elaborazione della pagina e di utilizzarlo nuovamente anziché elaborare di nuovo la pagina a fronte della richiesta di un utente.

Cache dell'applicazione

La cache dell'applicazione fornisce una soluzione a livello di programmazione per l'archiviazione di dati arbitrari in memoria tramite le coppie chiave/valore. L'utilizzo della cache dell'applicazione è analogo a quello dello stato dell'applicazione. Tuttavia, diversamente dallo stato dell'applicazione, i dati nella cache dell'applicazione sono volatili, il che significa che non sono archiviati in memoria per tutto il ciclo di vita dell'applicazione. Il vantaggio di utilizzare la cache dell'applicazione risiede nel fatto che ASP.NET gestisce la cache e rimuove gli elementi scaduti o invalidati, oppure quando la memoria è insufficiente. È anche possibile configurare la memorizzazione dei dati nella cache dell'applicazione in modo che informi l'applicazione quando viene rimosso un elemento. Per ulteriori informazioni, vedere Memorizzazione nella cache dei dati dell'applicazione.

Il criterio da adottare quando si utilizza la cache dell'applicazione consiste nel determinare se nella cache esiste un elemento ogni volta che si ha accesso a quell'elemento e, in caso affermativo, utilizzarlo. Se l'elemento non è presente, è possibile ricrearlo e memorizzarlo nuovamente nella cache. Questo criterio consente di assicurare che nella cache siano sempre presenti i dati più recenti.

Per ulteriori informazioni, vedere Procedura: recuperare i valori degli elementi memorizzati nella cache.

Cache di output della pagina

La cache di output della pagina archivia nella memoria i contenuti di una pagina ASP.NET elaborata. In questo modo, ASP.NET è in grado di inviare una risposta della pagina a un client senza dover eseguire nuovamente il ciclo di vita di elaborazione della pagina. La memorizzazione nella cache dell'output della pagina risulta particolarmente utile per le pagine che non vengono modificate frequentemente ma la cui creazione richiede una notevole elaborazione. Ad esempio, se si sta creando una pagina Web a traffico elevato per visualizzare dati che non vengono aggiornati frequentemente, la memorizzazione nella cache dell'output della pagina può indurre un notevole incremento delle prestazioni di quella pagina. La memorizzazione nella cache della pagina può essere configurata individualmente per ogni pagina, oppure è possibile creare profili della cache nel file Web.config, che consentono di definire una sola volta le impostazioni di memorizzazione nella cache e di utilizzare le stesse impostazioni per più pagine.

La memorizzazione nella cache dell'output della pagina fornisce due modelli per la memorizzazione nella cache della pagina: memorizzazione completa e memorizzazione parziale. La memorizzazione completa nella cache della pagina consente di mantenere l'intero contenuto di una pagina in memoria e di utilizzarlo per soddisfare le richieste del client. La memorizzazione parziale nella cache della pagina consente di memorizzare nella cache parti della pagina mentre altre parti si mantengono dinamiche. Per ulteriori informazioni, vedere Memorizzazione nella cache di pagine ASP.NET.

La memorizzazione parziale nella cache della pagina può operare in due modi: memorizzazione nella cache a livello di controllo e sostituzione post-cache. La memorizzazione nella cache a livello di controllo, a volte definita anche memorizzazione nella cache a livello di frammento, consente di memorizzare nella cache alcune parti dell'output della pagina, includendo le informazioni in un controllo utente e contrassegnandolo come inseribile nella cache. In questo modo, è possibile memorizzazione nella cache un contenuto specifico all'interno di una pagina, mentre la pagina nel suo insieme non viene memorizzata nella cache e viene quindi ricreata ogni volta. Ad esempio, se si crea una pagina in cui vengono visualizzati contenuti sostanzialmente dinamici, come, ad esempio, quotazioni azionarie, ma che include anche sezioni statiche come, ad esempio, riepiloghi settimanali, è possibile inserire queste sezioni statiche nei controlli utente e consentirne la memorizzazione nella cache.

La sostituzione post-cache rappresenta il processo opposto. La pagina nel suo insieme viene memorizzata nella cache, ma i frammenti all'interno della pagina sono dinamici. Ad esempio, se si crea una pagina statica per determinati periodi di tempo, è possibile impostare l'intera pagina come memorizzabile nella cache. Se è stato aggiunto un controllo Label alla pagina in cui viene visualizzato il nome dell'utente, Label non cambierà in caso di aggiornamento della pagina e di utenti diversi, e visualizzerà il nome dell'utente che ha richiesto la pagina prima che fosse memorizzata nella cache. Tuttavia, la sostituzione post-cache consente di configurare la pagina da memorizzare nella cache, ma singole sezioni della pagina vengono contrassegnate come non memorizzabili nella cache. In questo caso, è possibile aggiungere i controlli Label personalizzati a una sezione non memorizzabile nella cache; tali controlli verrebbero creati in modo dinamico per ciascun utente e per ciascuna richiesta della pagina. Per ulteriori informazioni, vedere Memorizzazione nella cache di parti di una pagina ASP.NET.

Memorizzazione di pagine nella cache in base ai parametri di richiesta

Oltre a memorizzare nella cache una singola versione di una pagina, la memorizzazione nella cache dell'output della pagina di ASP.NET fornisce funzionalità per creare più versioni della pagina che variano in base ai diversi parametri di richiesta. Per ulteriori informazioni, vedere Memorizzazione nella cache di più versioni di una pagina.

Rimozione automatica dei dati

ASP.NET può rimuovere i dati dalla cache per uno dei seguenti motivi:

  • Perché la memoria sul server non è sufficiente, processo noto come scavenging.

  • Perché l'elemento nella cache è scaduto.

  • Perché la dipendenza dell'elemento è cambiata.

Per facilitare la gestione degli elementi memorizzati nella cache, ASP.NET può notificare all'applicazione la rimozione di elementi dalla cache.

Scavenging

Lo scavenging è il processo di eliminazione degli elementi dalla cache quando non è disponibile una quantità di memoria sufficiente. Gli elementi vengono rimossi se non vi si accede da diverso tempo oppure se sono contrassegnati con bassa priorità al momento dell'inserimento nella cache. ASP.NET utilizza l'oggetto CacheItemPriority per determinare quali elementi eliminare per primi. Per ulteriori informazioni, vedere Procedura: aggiungere elementi alla cache.

Scadenza

Oltre a eseguire lo scavenging, ASP.NET rimuove automaticamente gli elementi dalla cache quando scadono. Quando si aggiunge un elemento alla cache, è possibile impostarlo in modo che scada come illustrato nella tabella riportata di seguito.

Tipo di scadenza

Descrizione

Scadenza variabile

Specifica la scadenza in base al periodo di tempo dall'ultima volta a cui si ha avuto accesso a un elemento. Ad esempio, è possibile impostare la scadenza di un elemento 20 minuti dopo che è stato eseguito l'ultimo accesso a tale elemento nella cache.

Scadenza assoluta

Specifica la scadenza di un elemento in un determinato momento, indipendentemente dalla frequenza di accesso. Ad esempio, è possibile impostare la scadenza di un elemento alle ore 18:00 oppure dopo quattro ore.

Dipendenze

È possibile configurare la durata di un elemento nella cache in modo che dipenda da altri elementi dell'applicazione come, ad esempio, i file o i database. Quando l'elemento da cui dipende un elemento nella cache viene modificato, ASP.NET rimuove l'elemento dalla cache. Ad esempio, se sul sito Web viene visualizzato un report creato da un file XML, è possibile inserire il report nella cache e configurarlo in modo che abbia una dipendenza dal file XML. Quando il file XML viene modificato, ASP.NET rimuove il report dalla cache. Quando il codice richiede il report, determina innanzitutto se il report è presente nella cache e, in caso contrario, è in grado di ricrearlo. In questo modo, è sempre disponibile una versione aggiornata del report.

Nella seguente tabella sono illustrate le dipendenze supportate dalla memorizzazione nella cache di ASP.NET.

Dipendenza

Descrizione

Dipendenza di chiave

Gli elementi nella cache dell'applicazione sono memorizzati nelle coppie chiave/valore. La dipendenza di chiave consente a un elemento di dipendere dalla chiave di un altro elemento nella cache dell'applicazione. Quando viene rimosso l'elemento originale, viene rimosso anche l'elemento con la dipendenza di chiave. Ad esempio, è possibile aggiungere un elemento della cache denominato ReportsValid, quindi memorizzare nella cache numerosi report che dipendono dalla chiave ReportsValid. Quando viene rimosso l'elemento ReportsValid, vengono rimossi dalla cache anche tutti i report dipendenti memorizzati nella cache.

Dipendenza di file

Un elemento nella cache dipende da un file esterno. Se il file viene modificato o eliminato, l'elemento memorizzato nella cache viene rimosso.

Dipendenza di SQL

Un elemento nella cache dipende dalle modifiche in una tabella di un database Microsoft SQL Server 2005, SQL Server 2000 o SQL Server 7.0. Per SQL Server 2005, un elemento può dipendere da una riga in una tabella. Per ulteriori informazioni, vedere Inserimento nella cache in ASP.NET con la classe SqlCacheDependency.

Dipendenza di aggregazione

Un elemento nella cache dipende da più elementi tramite l'utilizzo della classe AggregateCacheDependency. Se una delle dipendenze viene modificata, l'elemento viene rimosso dalla cache.

Dipendenza personalizzata

Un elemento nella cache è configurato con una dipendenza creata nel codice personalizzato. Ad esempio, è possibile creare una dipendenza personalizzata della cache del servizio Web che rimuove i dati dalla cache quando una chiamata a un servizio Web restituisce un valore specifico.

Notifica di rimozione dell'elemento dalla cache dell'applicazione

È possibile ricevere una notifica quando un elemento viene rimosso dalla cache dell'applicazione. Se, ad esempio, la creazione di un elemento comporta un lungo processo di elaborazione, è possibile essere informati quando questo viene rimosso dalla cache, in modo da poterlo sostituire immediatamente. Di conseguenza, alla successiva richiesta dell'elemento, l'utente non dovrà attendere che venga elaborato. Per ulteriori informazioni, vedere Procedura: notificare all'applicazione la rimozione di un elemento dalla cache.

Vedere anche

Attività

Procedura: memorizzare nella cache l'output di pagine con dipendenze dei file

Concetti

Memorizzazione nella cache di pagine ASP.NET

Memorizzazione nella cache dei dati dell'applicazione

Inserimento nella cache in ASP.NET con la classe SqlCacheDependency