Esporta (0) Stampa
Espandi tutto
Il presente articolo è stato tradotto manualmente. Passare il puntatore sulle frasi nell'articolo per visualizzare il testo originale.
Traduzione
Originale

Cenni preliminari sull'inserimento nella cache in ASP.NET

Spesso è possibile migliorare le prestazioni di un'applicazione archiviando in 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 rapporto a cui gli utenti accedono spesso, può essere una scelta efficiente evitare di ricreare il rapporto ogni volta che viene richiesto da un utente. 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 tale 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 un oggetto DataSet o un oggetto business del rapporto 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.

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. Ciò 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 Memorizzazione nella cache in applicazioni .NET Framework e Procedura: recuperare i valori degli elementi memorizzati nella cache.

Un tipo di memorizzazione nella cache tipico per le applicazioni server è la memorizzazione nella cache di output. Questo tipo di memorizzazione consente di archiviare codice HTML di cui è stato eseguito il rendering. Il codice HTML archiviato viene servito in risposta a richieste successive per la stessa pagina. È possibile utilizzare la memorizzazione nella cache di output per memorizzare nella cache una pagina Web completa o solo l'output di un controllo ASP.NET. La memorizzazione nella cache di output consente di effettuare le operazioni seguenti:

  • Configurare ASP.NET per memorizzare nella cache una determinata voce della cache di output per un periodo specifico.

  • Memorizzare nella cache una versione diversa del contenuto in base alle preferenze relative alla lingua dell'utente o al tipo di browser dei client che visitano l'applicazione.

  • Memorizzare nella cache una versione mobile di una pagina diversa da una versione ottimizzata per un browser desktop.

  • Configurare ASP.NET per eliminare voci della cache in base a un evento esterno.

La memorizzazione nella cache di output è estendibile. È possibile utilizzare un provider della cache di output personalizzato in grado di archiviare dati in qualsiasi dispositivo di archiviazione dati.

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 di 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 di 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 mantenere parti specificate di una pagina in memoria e la creazione dinamica di altre parti della pagina. Per ulteriori informazioni, vedere Memorizzazione nella cache di parti di una pagina 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 memorizzare nella cache un contenuto specifico all'interno di una pagina, mentre la pagina nel suo insieme non viene memorizzata nella cache, ma ricreata a ogni richiesta. 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 specificarne 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.

Con ASP.NET viene aggiunta estendibilità alla memorizzazione nella cache di output, che consente di configurare uno o più provider di cache di output personalizzati. I provider di cache di output possono utilizzare qualsiasi meccanismo di archiviazione per rendere persistente il contenuto HTML. Queste opzioni di archiviazione possono includere dischi locali o remoti, archiviazione di tipo cloud e motori di cache distribuiti.

L'estendibilità dei provider di cache di output in ASP.NET consente di progettare strategie di memorizzazione nella cache di output più aggressive e più intelligenti per i siti Web. È ad esempio possibile creare un provider di cache di output per la memorizzazione nella cache delle "prime 10" pagine di un sito in memoria, mentre le pagine con un traffico minore vengono memorizzate su disco. In alternativa, è possibile memorizzare nella cache ogni diversa combinazione di una pagina di cui è stato eseguito il rendering, utilizzando tuttavia una cache distribuita, in modo che il consumo di memoria venga scaricato dai server Web front-end.

È possibile creare un provider di cache di output personalizzato come classe derivata dal tipo OutputCacheProvider. È quindi possibile configurare il provider nel file Web.config utilizzando la nuova sottosezione providers dell'elemento outputCache come illustrato nell'esempio seguente:

<caching>
  <outputCache defaultProvider="AspNetInternalProvider">
    <providers>
      <add name="DiskCache" 
          type="Test.OutputCacheEx.DiskOutputCacheProvider, DiskCacheProvider"/>
    </providers>
  </outputCache>
</caching>

Per ulteriori informazioni ed esempi in cui viene illustrato come configurare la cache di output, vedere Elemento outputCache per caching (schema delle impostazioni ASP.NET). Per ulteriori informazioni sulle classi che supportano la memorizzazione nella cache, vedere la documentazione relativa alle classi OutputCache e OutputCacheProvider.

Per impostazione predefinita, per tutti i controlli, le pagine di cui è stato eseguito il rendering e le risposte HTTP viene utilizzata la cache di output in memoria, illustrata nell'esempio precedente (dove l'attributo defaultProvider è impostato su AspNetInternalProvider). È possibile modificare il provider di cache di output predefinito utilizzato per un'applicazione Web specificando un nome di provider diverso per defaultProvider.

È inoltre possibile selezionare provider di cache di output diversi per singoli controlli e singole richieste. Il modo più semplice per scegliere un provider di cache di output diverso per controlli utente Web diversi consiste nell'eseguire questa operazione in modo dichiarativo utilizzando l'attributo providerName in una direttiva @ Page o @ Control, come illustrato nell'esempio seguente:

<%@ OutputCache Duration="60" VaryByParam="None" 
    providerName="DiskCache" %>

Per specificare un provider di cache di output diverso per una richiesta HTTP, è possibile eseguire l'override del nuovo metodo GetOutputCacheProviderName nel file Global.asax, per specificare a livello di codice il provider da utilizzare per una richiesta specifica. Per ulteriori informazioni, vedere GetOutputCacheProviderName.

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 rapporto, determina innanzitutto se il rapporto è 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 rapporti 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.

È 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.

Aggiunte alla community

AGGIUNGI
Mostra:
© 2014 Microsoft