Condividi tramite


Progettazione e configurazione per ottimizzare le prestazioni

Aggiornamento: novembre 2007

In questo argomento vengono illustrate le opzioni di progettazione, configurazione, compilazione e memoria che è possibile utilizzare per migliorare le prestazioni di un'applicazione Web.

Modelli di programmazione asincrona

ASP.NET supporta tecniche di programmazione asincrona che consentono di spostare un'attività ad esecuzione prolungata, come una query in un database, in un thread che viene eseguito separatamente rispetto al thread principale dell'applicazione. È possibile utilizzare le seguenti tecniche:

  • ComponenteBackgroundWorker   La classe BackgroundWorker dello spazio dei nomi System.ComponentModel consente di aggiungere il codice per l'attività di lunga durata nel gestore eventi DoWork e di chiamare il metodo RunWorkerAsync per generare l'evento DoWork. L'esecuzione del thread chiamante continua mentre il metodo del thread di lavoro viene eseguito in modo asincrono. Quando l'esecuzione del metodo termina, il componente BackgroundWorker avvisa il thread chiamante generando l'evento RunWorkerCompleted. Per ulteriori informazioni, vedere Componente BackgroundWorker.

  • Programmazione asincrona basata su eventi   Sono disponibili diversi tipi di modello asincrono basato su eventi, a seconda della complessità delle operazioni supportate da una determinata classe. Le classi più semplici possono presentare un solo metodo MethodNameAsync e un evento MethodNameCompleted corrispondente. Le classi più complesse possono invece disporre di diversi metodi MethodNameAsync, ognuno dei quali con un evento MethodNameCompleted associato, nonché di versioni sincrone di tali metodi. Per ogni metodo asincrono le classi possono supportare funzionalità di annullamento e generazione di report sullo stato di avanzamento, nonché risultati incrementali.

    Un metodo asincrono può inoltre supportare più chiamate in sospeso, ovvero più richiami concorrenti, consentendo al codice di chiamarlo un numero indeterminato di volte prima del completamento di altre operazioni in sospeso. Per una gestione efficace di questa situazione può essere necessario che nell'applicazione venga tenuto traccia del completamento di ogni operazione.

    Per una descrizione completa di questo modello e della relativa implementazione, vedere Cenni preliminari sul modello asincrono basato su eventi.

  • Programmazione asincrona con IAsyncResult   Un'operazione asincrona che utilizza il modello di progettazione IAsyncResult viene implementata come due metodi denominati BeginOperationName ed EndOperationName, che rispettivamente iniziano e terminano l'operazione asincrona OperationName. BeginOperationName restituisce immediatamente il controllo al thread chiamante. Il metodo EndOperationName termina l'operazione asincrona OperationName. Il tempismo della chiamata a EndOperationName è importante, perché blocca il thread chiamante se OperationName non è stata completata. Per informazioni dettagliate, vedere Cenni preliminari sulla programmazione asincrona.

  • Clients callbacks   In un callback client, una funzione script sul client invia una richiesta a una pagina Web ASP.NET senza il sovraccarico di un postback.

Per un esempio in cui vengono utilizzate alcune di queste tecniche, vedere Esempio relativo alle tecnologie del modello asincrono basato su eventi.

Opzioni di compilazione e configurazione

Il modo in cui l'applicazione viene compilata e configurata influisce sulle prestazioni. Di seguito vengono forniti suggerimenti su come far funzionare in modo efficiente le applicazioni Web nel loro complesso.

  • Se l'applicazione Web è di grandi dimensioni, precompilarla.

  • Riciclare i processi quando si eseguono applicazioni Web ASP.NET su Internet Information Services 5.0.

  • Se necessario, regolare il numero di thread a disposizione di ogni processo di lavoro dell'applicazione. Sui computer a più processori provare ad attivare il Web gardening per le applicazioni che si basano eccessivamente sulle risorse esterne.

  • Disabilitare la modalità di debug.

  • Mettere a punto i file di configurazione per il computer server Web e per le singole applicazioni in base alle proprie esigenze specifiche utilizzando le seguenti tecniche:

    • Abilitare l'autenticazione solo per le applicazioni che la richiedono.

    • Configurare le impostazioni di codifica di richiesta e risposta appropriate per l'applicazione.

    • Valutare l'opportunità di disabilitare la proprietà AutoEventWireup per l'applicazione.

    • Rimuovere i moduli inutilizzati dalla pipeline di elaborazione delle richieste.

Per informazioni dettagliate, vedere Cenni preliminari sulle prestazioni.

Opzioni di configurazione della cache

Per migliorare le prestazioni dell'applicazione, è possibile configurare la memorizzazione nella cache ai seguenti livelli:

  • Applicazione   Nel file Web.config dell'applicazione è possibile utilizzare l'elemento OutputCacheSection per controllare la memorizzazione nella cache per l'intera applicazione. Utilizzando l'elemento OutputCacheSettingsSection è possibile impostare profili della cache che potranno essere applicati a singole pagine.

  • Computer   È possibile configurare nel file Machine.config le stesse opzioni configurabili nel file Web.config.

  • Pagina   È possibile configurare la memorizzazione nella cache nelle singole pagine applicando i profili della cache definiti in un file di configurazione. In alternativa, è possibile configurare le singole proprietà della cache nella direttiva @ OutputCache o impostando gli attributi nella definizione della classe della pagina.

  • Controllo   È possibile configurare la memorizzazione nella cache dei controlli utente impostando la direttiva @ OutputCache nel file dei controlli utente oppure impostando l'attributo PartialCachingAttribute nella definizione della classe del controllo.

Per ulteriori informazioni, vedere Configurazione della cache in ASP.NET.

Riciclo della memoria con IIS 6.0

Se un'applicazione contiene codice che causa problemi, ad esempio un'applicazione di interoperabilità COM con perdite di memoria note, e non è possibile riscrivere facilmente il codice, può essere utile limitare i problemi riciclando periodicamente il processo di lavoro che serve l'applicazione. Riciclando il processo di lavoro si sostituisce un'istanza dell'applicazione in memoria. IIS 6.0 può riciclare automaticamente i processi di lavoro riavviando il processo o i processi di lavoro assegnati a un pool di applicazioni. Ciò contribuisce al buon funzionamento delle applicazioni.

Mantenere lo stato durante il riciclo

In presenza di un pool di applicazioni con applicazioni che dipendono dai dati sullo stato, è necessario decidere se riciclare i processi di lavoro assegnati a tale pool. Quando si ricicla un processo di lavoro, i dati sullo stato delle applicazioni mantenuti nel processo vanno persi. In tal caso è necessario decidere di non utilizzare il riciclo.

È possibile riciclare processi e risolvere il problema dello stato mantenendo i dati sullo stato all'esterno del processo di lavoro, ad esempio in un database. Tuttavia, mantenere i dati sullo stato out-of-process per consentire il riciclo può avere ripercussioni sulle prestazioni del server, come descritto di seguito:

  • Le prestazioni calano a seguito del sovraccarico gestionale necessario per spostare i dati tra l'applicazione e l'archivio dati.

  • Il riciclo svuota le cache dei dati in-process, quindi è necessario ricreare le cache.

Con ASP.NET è possibile rendere persistente lo stato della sessione utilizzando un servizio per lo stato della sessione o un database SQL. Per ulteriori informazioni, vedere Modalità stato sessione.

Per ulteriori informazioni, vedere Recycling Worker Processes (IIS 6.0).

Servizio immagini native

Il servizio immagini native è un servizio Windows che genera e mantiene immagini native, ovvero file contenenti codice compilato del computer specifico del processore. Questo servizio consente di differire le azioni di installazione e aggiornamento delle immagini native in modo che vengano eseguite nei periodi di inattività del computer. Il generatore di immagini native (Ngen.exe) consente di migliorare le prestazioni delle applicazioni gestite. Ngen.exe crea immagini native e le installa nella cache delle immagini native del computer locale. Il runtime può utilizzare le immagini native della cache anziché il compilatore JIT per compilare l'assembly originale.

Per ulteriori informazioni, vedere l'articolo NGen Revs Up Your Performance with Powerful New Features nel sito Web MSDN Magazine (informazioni in lingua inglese).

Global Assembly Cache e working set

Il working set di un processo è la serie di pagine di memoria disponibili per il processo nella memoria RAM fisica. Queste pagine sono residenti e disponibili a un'applicazione per l'utilizzo senza che generino un errore di pagina. È possibile monitorare le dimensioni del working set utilizzando le proprietà PeakWorkingSet e WorkingSet. È possibile ridurre il working set di un'applicazione inserendo gli assembly nella Global Assembly Cache. Questa opzione è consigliata principalmente per gli assembly di livello intermedio e condivisi.

Vedere anche

Altre risorse

Chapter 4 — Architecture and Design Review of a .NET Application for Performance and Scalability

Chapter 6 — Improving ASP.NET Performance

Microsoft Patterns and Practices