Conception et configuration pour les performances

Mise à jour : novembre 2007

Cette rubrique traite des options de conception, de configuration, de compilation et de mémoire disponibles pour améliorer les performances d'une application Web.

Modèles de programmation asynchrones

ASP.NET prend en charge des techniques de programmation asynchrones qui vous permettent de déplacer une tâche à exécution longue telle qu'une requête de base de données vers un thread qui s'exécute indépendamment du thread d'application principal. Vous pouvez utiliser les techniques suivantes :

  • ComposantBackgroundWorker   La classe BackgroundWorker de l'espace de noms System.ComponentModel vous permet d'ajouter le code de la tâche à exécution longue au gestionnaire d'événements DoWork et d'appeler la méthode RunWorkerAsync pour déclencher l'événement DoWork. Le thread appelant continue de s'exécuter pendant que la méthode de travail s'exécute de façon asynchrone. Lorsque la méthode est terminée, le composant BackgroundWorker alerte le thread appelant en déclenchant l'événement RunWorkerCompleted. Pour plus d'informations, consultez BackgroundWorker, composant.

  • Programmation asynchrone basée sur les événements   Le modèle asynchrone basé sur les événements peut revêtir plusieurs formes, selon la complexité des opérations prises en charge par une classe particulière. Les classes les plus simples peuvent avoir une seule méthode MethodNameAsync et un événement MethodNameCompleted correspondant. Les classes plus complexes peuvent avoir plusieurs méthodes MethodNameAsync, chacune avec un événement MethodNameCompleted correspondant, ainsi que des versions synchrones de ces méthodes. Les classes peuvent éventuellement prendre en charge l'annulation, le rapport de progression et les résultats incrémentiels pour chaque méthode asynchrone.

    Une méthode asynchrone peut également prendre en charge plusieurs appels en attente (plusieurs appels simultanés), ce qui permet à votre code de l'appeler autant de fois que nécessaire avant de terminer d'autres opérations en attente. La gestion correcte de cette situation peut nécessiter que votre application effectue le suivi de l'achèvement de chaque opération.

    Pour une description complète de ce modèle et son implémentation, consultez Vue d'ensemble du modèle asynchrone basé sur des événements.

  • Programmation asynchrone à l'aide d'IAsyncResult   Une opération asynchrone qui utilise le modèle de conception IAsyncResult est implémentée comme deux méthodes nommées BeginOperationName et EndOperationName qui commencent et terminent le OperationName asynchrone respectivement. BeginOperationName retourne immédiatement le contrôle au thread appelant. La méthode EndOperationName termine le OperationName asynchrone. Le minutage de l'appel à EndOperationName est important, car il bloque le thread appelant si OperationName n'est pas terminé. Pour plus d'informations, consultez Vue d'ensemble de la programmation asynchrone.

  • Clients callbacks   Dans un rappel client, une fonction de script client envoie une demande à une page Web ASP.NET sans la charge d'une publication.

Pour obtenir un exemple d'utilisation de ces techniques, consultez Modèle asynchrone basé sur les événements, exemple de technologie.

Options de compilation et de configuration

La qualité d'exécution de votre application dépend de la manière dont vous la compilez et la configurez. Les instructions suivantes proposent des solutions pour que vos applications Web fonctionnent efficacement comme un tout :

  • Si vous possédez une grande application Web, précompilez-la.

  • Recyclez les processus lorsque vous exécutez des applications Web ASP.NET sur Internet Information Services 5.0.

  • Au besoin, réglez le nombre de threads par processus de traitement pour votre application. Pour les applications qui dépendent fortement des ressources externes, envisagez d'activer le jardinage Web sur les ordinateurs multiprocesseurs.

  • Désactivez le mode débogage.

  • Réglez les fichiers de configuration pour votre ordinateur serveur Web et les applications spécifiques afin de les adapter à vos besoins à l'aide des techniques suivantes :

    • Activez l'authentification uniquement pour les applications qui le requièrent.

    • Configurez votre application pour qu'elle utilise les paramètres de codage de demande et de réponse appropriés.

    • Pensez à désactiver AutoEventWireup pour votre application.

    • Supprimez les modules inutilisés du pipeline de traitement de demande.

Pour plus d'informations, consultez Vue d'ensemble de la performance.

Options de configuration du cache

Pour améliorer les performances de l'application, vous pouvez configurer la mise en cache aux niveaux suivants :

  • Application   Dans le fichier Web.config d'une application, vous pouvez utiliser l'élément OutputCacheSection pour contrôler la mise en cache pour toute l'application. À l'aide de l'élément OutputCacheSettingsSection, vous pouvez installer des profils de cache qui peuvent être appliqués ensuite aux pages individuelles.

  • Ordinateur   Vous pouvez configurer les mêmes options dans le fichier Machine.config que dans le fichier Web.config.

  • Page   Vous pouvez configurer la mise en cache dans des pages individuelles en appliquant des profils de cache définis dans un fichier de configuration. Vous pouvez aussi configurer des propriétés de cache individuelles, soit dans la directive @ OutputCache, soit en définissant des attributs dans la définition de classe de la page.

  • Control   Vous pouvez configurer la mise en cache des contrôles utilisateur en définissant la directive @ OutputCache dans le fichier du contrôle utilisateur ou en définissant l'attribut PartialCachingAttribute dans la définition de la classe du contrôle.

Pour plus d'informations, consultez Configuration du cache dans ASP.NET.

Recyclage de la mémoire avec IIS 6.0

Si une application contient du code causant des problèmes, par exemple une application COM Interop avec des fuites de mémoire connues, et que vous ne pouvez pas réécrire le code facilement, il peut s'avérer utile de circonscrire les problèmes en recyclant périodiquement le processus de traitement qui gère l'application. Le recyclage du processus de traitement remplace une instance de l'application dans la mémoire. IIS 6.0 peut recycler les processus de traitement en redémarrant ceux qui sont assignés à un pool d'applications. Cela permet de maintenir les applications opérationnelles.

Maintien de l'état au cours du recyclage

Si vous avez un pool d'applications dont certaines dépendent des données d'état, vous devez décider s'il faut recycler les processus de traitement qui sont assignés à ce pool d'applications. Lorsque vous recyclez un processus de traitement, les données d'état des applications conservées dans le processus sont perdues. Dans ce cas, vous pouvez choisir de ne pas utiliser le recyclage.

Vous pouvez recycler les processus et résoudre le problème d'état en maintenant les données d'état hors du processus de traitement, par exemple dans une base de données. Toutefois, la conservation des données d'état en dehors du processus pour permettre le recyclage peut affecter les performances du serveur comme suit :

  • Les performances sont réduites à cause des charges de gestion nécessaires pour déplacer les données entre l'application et le magasin de données.

  • Le recyclage vide tous les caches des données en cours de processus, d'où la nécessité de reconstituer les caches.

ASP.NET vous offre la possibilité de rendre persistant l'état de session à l'aide d'un service d'état de session ou d'une base de données SQL. Pour plus d'informations, consultez Modes d'état de session.

Pour plus d'informations, consultez Recycling Worker Processes (IIS 6.0).

Service d'images natives

Le service d'images natives est un service Windows qui génère et conserve des images natives, qui sont des fichiers contenant le code machine spécifique au processeur compilé. Le service d'images natives vous permet de différer l'installation et la mise à jour d'images natives aux périodes pendant lesquelles l'ordinateur est inactif. L'outil Native Image Generator Tool (Ngen.exe) est un outil qui améliore les performances des applications managées. Ngen.exe crée des images natives et les installe dans le cache des images natives de l'ordinateur local. Le runtime peut utiliser à la place des images natives du cache à l'aide du compilateur juste-à-temps (JIT) pour compiler l'assembly d'origine.

Pour plus d'informations, consultez l'article (en anglais) NGen Revs Up Your Performance with Powerful New Features sur le site Web MSDN Magazine.

Global Assembly Cache et le jeu de travail

Le jeu de travail d'un processus est le jeu de pages mémoire actuellement disponible pour le processus dans la mémoire vive (RAM) physique. Ces pages sont résidentes et disponibles pour une application sans déclencher de défaut de page. Vous pouvez surveiller la taille du jeu de travail à l'aide des propriétés PeakWorkingSet et WorkingSet. Vous pouvez réduire le jeu de travail d'une application en plaçant des assemblys dans le Global Assembly Cache. Cette option est recommandée à l'origine pour les assemblys de couche intermédiaire et partagés.

Voir aussi

Autres ressources

Chapitre 4 - Architecture and Design Review of a .NET Application for Performance and Scalability

Chapitre 6 - Improving ASP.NET Performance

Microsoft Patterns and Practices