Memorizzazione nella cache di più versioni dell'output del controllo utente

Allo stesso modo in cui è possibile variare le versioni di una pagina memorizzate nella cache di output, è possibile memorizzare nella cache di output le diverse aree di una pagina che contengono controlli utente. Questa operazione può essere eseguita variando l'output dei controlli utente in base al nome del controllo e ai valori dei parametri delle stringhe di query GET o dei parametri dei POST dei form oppure variando l'output solo in base ai valori dei parametri. Si possono, inoltre, memorizzare nella cache più versioni di un controllo utente in una pagina dichiarando più volte il controllo nel file ASPX che lo contiene. È possibile utilizzare una qualsiasi di queste tecniche, sia che si specifichi la memorizzazione del controllo utente nella cache di output mediante la direttiva @ OutputCache nel file ascx, sia che si utilizzi l'attributo PartialCachingAttribute quando si sviluppa il controllo utente in una classe code-behind.

La direttiva @ OutputCache per i controlli utente supporta quattro attributi, VaryByParam, VaryByCustom, VaryByControl e Shared. La classe PartialCachingAttribute include quattro proprietà, VaryByParams, VaryByControls, VaryByCustom e Shared, che consentono di utilizzare le stesse tecniche aggiungendo un attributo a un controllo utente in una classe code-behind.

Quando viene richiesta per la prima volta una pagina ASP.NET che contiene un controllo utente impostato per la memorizzazione nella cache di output, un'istanza dell'output del controllo verrà salvata in memoria. Per impostazione predefinita, alla richiesta di ogni pagina che contiene lo stesso controllo utente verrà aggiunta in memoria un'altra istanza dell'output del controllo.

Se ad esempio si è creato un controllo utente denominato Sample.ascx impostato per la memorizzazione nella cache di output e si è aggiunto tale controllo a 25 pagine ASP.NET dell'applicazione, nella cache di output vi saranno almeno altrettante versioni di Sample.ascx. Se poi si utilizza l'attributo VaryByControl, VaryByCustom o VaryByParam per modificare il comportamento della memorizzazione del controllo utente nella cache, la cache potrebbe contenere un numero ancora maggiore di versioni del controllo utente. Si immagini ad esempio di includere un controllo server Web TextBox nel proprio controllo utente e di impostarne la proprietà ID su MyTextBox. Se si imposta l'attributo VaryByControl su MyTextBox, nella cache verrà memorizzata una versione dell'output del controllo utente per ogni valore che il controllo MyTextBox riceve.

Se lo stesso controllo utente viene utilizzato in più pagine della stessa applicazione, sarà possibile risparmiare memoria impostando l'attributo Shared della direttiva @ OutputCache del controllo utente su true oppure impostando su true la proprietà Shared dell'attributo PartialCachingAttribute del controllo. In tal modo, ogni pagina accederà alla stessa istanza di output del controllo utente. L'utilizzo della proprietà Shared per i controlli utente di uso comune frequentemente memorizzati nella cache può consentire un considerevole risparmio di memoria.

Tra l'aggiunta dell'output di controlli utente alla cache di output e l'esecuzione della stessa operazione per l'output di una pagina esiste una differenza sostanziale. Sebbene per entrambi gli elementi sia supportato l'utilizzo dei parametri delle stringhe di query GET o dei parametri dei POST dei form per la creazione e la memorizzazione nella cache di diverse versioni di output, per i controlli utente non è supportata la memorizzazione nella cache basata sulle intestazioni HTTP.

Per variare i controlli utente memorizzati nella cache di output esistono quattro tecniche:

  • È possibile utilizzare l'attributo VaryByParam o la proprietà VaryByParams della classe PartialCachingAttribute che offre funzionalità identiche a quelle fornite per la memorizzazione dell'output della pagina nella cache. È possibile impostare tali elementi su qualsiasi stringa, purché corrispondente ai parametri delle stringhe di query GET o ai parametri dei POST dei form associati al controllo utente creato.

  • È possibile utilizzare l'attributo VaryByControl o la proprietà VaryByControls della classe PartialCachingAttribute per variare il controllo utente memorizzato nella cache di output in base alla proprietà ID di un controllo server ASP.NET contenuto nel controllo utente.

  • È possibile utilizzare l'attributo VaryByCustom o la proprietà VaryByCustom della classe PartialCachingAttribute in modo da definire il codice per una stringa personalizzata in base alla quale si desidera modificare l'output del controllo utente memorizzato nella cache. Il comportamento che ne consegue è simile a quello ottenuto con l'utilizzo dell'attributo VaryByControl per la variazione della memorizzazione nella cache dell'output delle pagine. Per ulteriori informazioni, vedere Procedura: memorizzare nella cache versioni di una pagina tramite stringhe personalizzate.

  • È possibile includere più istanze di un controllo utente in una pagina ASP.NET. A meno che non si sia impostato l'attributo Shared della direttiva @ OutputCache su true, l'output di ogni istanza del controllo verrà memorizzato nella cache.

Per ulteriori informazioni su ognuno di questi argomenti, vedere Procedura: memorizzare nella cache più versioni di un controllo utente in base ai parametri e Procedura: memorizzare nella cache più versioni di un controllo utente tramite attributi dichiarativi.

Vedere anche

Attività

Procedura: memorizzare nella cache più versioni di un controllo utente in base ai parametri
Procedura: memorizzare nella cache più versioni di un controllo utente tramite attributi dichiarativi

Concetti

Cenni preliminari sull'inserimento nella cache in ASP.NET
Novità della memorizzazione nella cache in ASP.NET
Memorizzazione nella cache di pagine ASP.NET
Memorizzazione nella cache di più versioni di una pagina