Découverte des outils de profilage (C#, Visual Basic, C++, F#)

Les outils de mesure des performances des applications sont essentiels pour les développeurs qui souhaitent optimiser leur code et améliorer les performances des applications. Visual Studio offre une gamme d’outils de profilage et de diagnostics permettant de diagnostiquer l’utilisation de la mémoire et du processeur, ainsi que d’autres problèmes au niveau de l’application. Avec ces outils, vous pouvez accumuler des données de performances quand vous exécutez votre application. Un profileur peut vous aider à prendre rapidement des décisions éclairées en fournissant une représentation visuelle des temps d’exécution et de l’utilisation du processeur pour votre application. Dans cet article, nous examinons rapidement les outils de profilage les plus courants.

Pour obtenir de l’aide sur le choix du bon outil ou pour voir la prise en charge de l’outil de profilage pour différents types d’applications, consultez Quel outil dois-je utiliser ?. Pour obtenir un didacticiel montrant une approche générale de l’optimisation du code à l’aide des outils de profilage, consultez le Guide du débutant pour optimiser le code.

Mesurer les performances dans les builds de production

Les outils du Profileur de performances sont destinés à fournir une analyse pour les builds de Production. Dans le profileur de performances, vous pouvez collecter des informations de diagnostic pendant l’exécution de l’application, puis examiner ces informations après l’arrêt de l’application (une analyse post-mortem).

Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2).

Capture d’écran de Profileur de performances.

Capture d’écran de Profileur de performances.

Pour plus d’informations sur l’utilisation du processeur ou de l’outil Utilisation de la mémoire dans le Profileur de performances par rapport aux outils intégrés au débogueur, consultez Exécuter des outils de profilage avec ou sans le débogueur.

Les outils disponibles dans le Profileur de performances sont les suivants :

Pour connaître la prise en charge des outils de profilage pour différents types d’applications, consultez Quel outil utiliser ?.

Dans certains scénarios, la fenêtre vous permet de sélectionner plusieurs outils de profilage. Les outils comme Utilisation de l’UC peuvent fournir des données complémentaires que vous pouvez utiliser dans votre analyse. Vous pouvez également utiliser le profileur de ligne de commande pour permettre des scénarios impliquant plusieurs outils de profilage.

Mesurer les performances lors du débogage

Les outils de profilage auxquels vous avez accès pendant une session de débogage sont disponibles dans la fenêtre Outils de diagnostic. Cette fenêtre apparaît automatiquement, sauf si vous l’avez désactivée. Pour afficher la fenêtre, cliquez sur Déboguer / Fenêtres / Afficher les outils de diagnostic (ou appuyez sur Ctrl + Alt + F2). Une fois la fenêtre ouverte, vous pouvez sélectionner les outils dont vous souhaitez collecter les données.

Fenêtre Outils de diagnostic

Pendant le débogage, vous pouvez utiliser la fenêtre Outils de diagnostic pour analyser l’utilisation du processeur et de la mémoire, et les compteurs .NET, et vous pouvez voir des événements indiquant des informations sur les performances.

Fenêtre Outils de diagnostic

Pendant le débogage, vous pouvez utiliser la fenêtre Outils de diagnostic pour analyser l’utilisation du processeur et de la mémoire, et vous pouvez voir des événements indiquant des informations sur les performances.

Vue résumé des outils de diagnostic

Vue résumé des outils de diagnostic

La fenêtre Outils de diagnostic est une méthode courante pour profiler des applications, mais pour les versions de mise en production (Release), vous pouvez également effectuer une analyse post-mortem de votre application à la place. Pour plus d’informations sur les différentes approches, consultez Exécuter les Outils de profilage avec ou sans le débogueur. Pour connaître la prise en charge des outils de profilage pour différents types d’applications, consultez Quel outil utiliser ?.

Les outils disponibles dans la fenêtre Outils de diagnostic ou pendant une session de débogage sont les suivants :

Conseil

Utilisez le nouveau lancement pour ignorer la page de lancement et exécuter automatiquement avec vos paramètres précédents en appuyant sur Alt+F2 ou en cliquant sur Déboguer > Profileur de performances.

Notes

Windows 8 et les versions ultérieures sont nécessaires pour exécuter les Outils de profilage avec le débogueur (fenêtre Outils de diagnostic).

Analyser l’utilisation de l’UC

L’outil Utilisation de l’UC est un bon point de départ pour analyser les performances de votre application. Il vous en dit plus sur les ressources du processeur qu’utilise votre application. Vous pouvez utiliser l’outil Utilisation du processeur intégré au débogueur ou l’outil post mortem Utilisation de l’UC.

Lorsque vous utilisez l’outil Utilisation du processeur intégré au débogueur, ouvrez la fenêtre Outil de diagnostic (si elle est fermée, choisissez Déboguer/Windows/Afficher les outils de diagnostic). Pendant le débogage, ouvrez la vue Résumé, puis sélectionnez Enregistrer le profil du processeur.

Activer l’utilisation du processeur dans les outils de diagnostic

Activer l’utilisation du processeur dans les outils de diagnostic

Pour utiliser l’outil plus efficacement, définissez deux points d’arrêt dans votre code, un au début et un à la fin de la fonction ou de la région de code que vous souhaitez analyser. Examinez les données de profilage quand une pause est marquée au second point d’arrêt.

La vue Utilisation de l’UC affiche une liste de fonctions, classées par durée d’exécution décroissante sous Top des fonctions. La section Chemin chaud vous montre la pile d’appels pour les fonctions qui utilisent le plus d’UC. Ces listes vous permettent de repérer les fonctions dans lesquelles se produisent des goulots d’étranglement.

Vue Utilisation du processeur des outils de diagnostic

La vue Utilisation de l’UC affiche une liste de fonctions, classées par durée d’exécution décroissante. Cette liste vous permet de repérer les fonctions dans lesquelles se produisent des goulots d’étranglement.

Vue Utilisation du processeur des outils de diagnostic

Cliquez sur une fonction qui vous intéresse et vous verrez une arborescence d’appels plus détaillée, avec la fonction sélectionnée mise en évidence. Le tableau montre les colonnes avec des données comme le temps passé dans la fonction, y compris les fonctions appelées (Processeur total), et une deuxième colonne qui montre le temps passé dans une fonction, à l’exclusion des fonctions appelées (Processeur auto). Ces données peuvent vous aider à déterminer si la fonction elle-même est un goulot d’étranglement.

Conseil

Le profileur Visual Studio prend en charge la collecte et l’affichage des traces. Le profileur peut également afficher les traces qui ont été collectées précédemment par d’autres outils, comme dotnet-trace. dotnet-trace produit des résultats d’échantillonnage, pas une trace instrumentée. Pour plus d’informations, consultez dotnet-trace.

Vue « papillon » des fonctions appelantes/fonctions appelées dans les Outils de diagnostic

Cliquez sur une fonction digne d’intérêt ; apparaît alors une vue « papillon » plus détaillée composée de trois volets, indiquant la fonction sélectionnée (au milieu), la fonction appelante (à gauche) et les fonctions appelées (à droite). La section Corps de la fonction montre la durée totale (et le pourcentage correspondant) passée dans le corps de la fonction, à l’exclusion du temps passé dans les fonctions appelantes et appelées. Ces données peuvent vous aider à déterminer si la fonction elle-même est un goulot d’étranglement.

Vue « papillon » des fonctions appelantes/fonctions appelées dans les Outils de diagnostic

Analyser l’utilisation de la mémoire

La fenêtre Outils de diagnostic vous permet également d’évaluer l’utilisation de la mémoire dans votre application à l’aide de l’outil Utilisation de la mémoire. Par exemple, vous pouvez consulter le nombre et la taille des objets sur le tas. Vous pouvez utiliser l’outil Utilisation de la mémoire intégré au débogueur ou l’outil Post-mortem Utilisation de la mémoire dans le Profileur de performances.

Les développeurs .NET peuvent choisir entre l’outil d’allocation d’objets .NET et l’outil Utilisation de la mémoire.

  • L’outil Allocation d’objets .NET vous aide à identifier les modèles d’allocation et les anomalies dans votre code .NET, et à identifier les problèmes courants liés au nettoyage de la mémoire. Cet outil s’exécute uniquement en tant qu’outil post-mortem. Vous pouvez exécuter cet outil sur des ordinateurs locaux ou distants.
  • L’outil Utilisation de la mémoire est utile pour identifier les fuites de mémoire, qui ne sont généralement pas courantes dans les applications .NET. Si vous avez besoin d’utiliser des fonctionnalités de débogueur lors de la vérification de la mémoire, comme l’exécution pas à pas dans le code, l’outil Utilisation de la mémoire intégré au débogueur est recommandé.

Pour analyser l’utilisation de la mémoire avec l’outil Utilisation de la mémoire, vous devez prendre au moins un instantané de mémoire. Souvent, la meilleure façon d’analyser la mémoire consiste à prendre deux instantanés, le premier juste avant un problème de mémoire suspecté et le second juste après. Ensuite, vous pouvez visualiser une comparaison des deux instantanés et voir exactement ce qui a changé. L’illustration suivante montre la prise d’un instantané avec l’outil intégré au débogueur.

Prendre un instantané dans les Outils de diagnostic

Prendre un instantané dans les Outils de diagnostic

Quand vous sélectionnez l’un des liens associés à une flèche, vous obtenez une vue différentielle du tas (une flèche rouge vers le haut Augmentation de l’utilisation de la mémoire indique un nombre d’objets croissant (à gauche) ou une taille de tas croissante (à droite)). Si vous cliquez sur le lien de droite, vous obtenez une vue de tas différentielle qui indique en premier les objets dont la taille a augmenté le plus dans le tas. Cela peut vous aider à identifier les problèmes de mémoire. Par exemple, dans l’illustration ci-dessous, les octets utilisés par les objets ClassHandlersStore ont augmenté de 3 492 unités dans le deuxième instantané.

Vue comparative du tas dans les Outils de diagnostic

Vue comparative du tas dans les Outils de diagnostic

Par contre, si vous cliquez sur le lien sur la gauche dans la vue Utilisation de la mémoire, la vue du tas est organisée par nombre d’objets ; les objets d’un type particulier dont le nombre a le plus augmenté sont affichés en haut (en fonction de la colonne Différence de nombre).

Instrumentation

L’outil d’instrumentation est similaire à l’outil Utilisation du processeur, mais il fournit le nombre d’appels exacts et le temps d’horloge au lieu de l’utilisation du processeur. La méthode d’instrumentation nécessite une surcharge accrue par rapport à l’outil Utilisation du processeur. Cet outil est disponible dans le Profileur de performances. Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2). Pour plus d’informations, consultez Instrumentation.

Capture d’écran montrant les données d’Instrumentation .NET.

Examiner les E/S de fichier

L’outil E/S de fichier vous aide à comprendre comment optimiser vos opérations d’E/S de fichier pour améliorer les performances de vos applications. Si vous essayez d’examiner et de diagnostiquer les temps de chargement lents, le nouvel outil d’E/S de fichier peut vous aider à comprendre l’impact des opérations d’E/S sur votre temps passé. Cet outil est disponible dans le Profileur de performances. Ouvrez le Profileur de performances en choisissant Déboguer > Profileur de performances (ou Alt + F2).

L’outil affiche les opérations de lecture et d’écriture de fichier dans une vue de liste à onglets.

Capture d’écran montrant l’outil d’E/S de fichier arrêté.

Examiner les performances à l’aide de PerfTips

Souvent, le moyen le plus simple d’afficher les informations de performances consiste à utiliser PerfTips. À l’aide de PerfTips, vous pouvez afficher les informations de performances tout en interagissant avec votre code. Vous pouvez consulter des informations telles que la durée de l’événement (mesurée à partir de la dernière suspension du débogueur ou du démarrage de l’application). Par exemple, si vous parcourez le code pas à pas (F10, F11), PerfTips vous indique la durée d’exécution de l’application entre l’étape précédente et l’étape actuelle.

Capture d’écran de Conseils sur les performances.

Capture d’écran de Conseils sur les performances.

Vous pouvez utiliser PerfTips pour examiner le temps nécessaire à l’exécution d’un bloc de code ou d’une seule fonction.

Les informations de PerfTips affichent les mêmes événements que ceux qui s’affichent également dans la vue Événements des outils de diagnostic. Dans la vue Événements, vous pouvez voir les différents événements qui se produisent pendant le débogage, comme la définition d’un point d’arrêt ou une exécution pas à pas du code.

Capture d’écran de la vue Événements des outils de diagnostic.

Capture d’écran de la vue Événements des outils de diagnostic.

Notes

Si vous avez Visual Studio Enterprise, vous pouvez également voir Événements IntelliTrace sous cet onglet.

Analyser le code asynchrone (.NET)

L’outil .NET Async vous permet d’analyser les performances du code asynchrone dans votre application. Cet outil est disponible dans le Profileur de performances. Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2).

L’outil affiche chaque opération asynchrone dans une vue de liste. Vous pouvez voir des informations comme l’heure de début, l’heure de fin et la durée totale d’une opération asynchrone.

Outil .NET Async arrêté

Analyser le code asynchrone (.NET)

L’outil .NET Async vous permet d’analyser les performances du code asynchrone dans votre application. Cet outil est disponible dans le Profileur de performances. Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2).

L’outil affiche chaque opération asynchrone dans une vue de liste. Vous pouvez voir des informations comme l’heure de début, l’heure de fin et la durée totale d’une opération asynchrone.

Outil .NET Async arrêté

Examiner les événements d’application

La visionneuse d’événements générique vous permet d’afficher l’activité de votre application via une liste d’événements, comme le chargement des modules, le démarrage de threads et les configurations système, pour vous aider à mieux diagnostiquer le fonctionnement de votre application directement dans le profileur Visual Studio. Cet outil est disponible dans le Profileur de performances. Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2).

L’outil affiche chaque événement dans une vue de liste. Les colonnes fournissent des informations sur chaque événement, comme le nom de l’événement, le timestamp et l’ID de processus.

Trace d’observateur d’événements

Analyser les performances de la base de données (.NET Core)

Pour les applications .NET Core qui utilisent ADO.NET ou Entity Framework Core, l’outil Base de données vous permet d’enregistrer les requêtes de base de données effectuées par votre application pendant une session de diagnostic. Vous pouvez ensuite analyser les informations sur des requêtes individuelles afin de trouver les endroits où les performances de votre application peuvent être améliorées. Cet outil est disponible dans le Profileur de performances. Ouvrez le profileur de performances en choisissant Déboguer>Profileur de performances (ou Alt + F2).

L’outil affiche chaque requête dans une vue de liste. Vous pouvez voir des informations comme l’heure et la durée de début de la requête.

Allocation

Visualiser les compteurs .NET (.NET Core)

À partir de Visual Studio 2019 version 16.7, vous pouvez utiliser l’outil Compteurs .NET dans Visual Studio pour visualiser les compteurs de performances. Vous pouvez visualiser les compteurs créés à l’aide de compteurs dotnet. Les compteurs dotnet prennent en charge de nombreux compteurs, comme l’utilisation du processeur et la taille du tas du récupérateur de mémoire.

L’outil affiche les valeurs en temps réel pour chaque compteur dans une vue de liste.

Collecte d’outils de compteur .NET.

Analyser la consommation des ressources (XAML)

Dans les applications XAML, comme les applications WPF pour poste de travail Windows et les applications UWP, vous pouvez analyser la consommation des ressources avec l’outil Chronologie de l’application. Par exemple, vous pouvez analyser le temps passé par votre application à préparer les trames de l’interface utilisateur (mise en page et rendu), à traiter les demandes du réseau et des disques, et dans les scénarios comme le démarrage de l’application, le chargement des pages et le redimensionnement des fenêtres. Pour utiliser l’outil, choisissez Chronologie de l’application dans le profileur de performances, puis choisissez Démarrer. Dans votre application, effectuez le scénario susceptible de présenter un problème de consommation de ressources, puis choisissez Arrêter la collecte pour générer le rapport.

La présence de taux de trames faibles dans le graphique Débit visuel peut correspondre à des problèmes visuels que vous constatez quand vous exécutez votre application. De même, la présence de nombres élevés dans le graphique Utilisation du thread d’interface utilisateur peut également indiquer des problèmes de réactivité de l’interface utilisateur. Dans le rapport, vous pouvez sélectionner une période de temps susceptible de présenter un problème de performances, puis examiner les activités de thread de l’interface utilisateur détaillées dans la vue Détails de la chronologie (volet inférieur).

Outil de profilage – Chronologie de l’application

Outil de profilage – Chronologie de l’application

La vue Détails de la chronologie comprend des informations comme le type d’activité (ou l’élément d’interface utilisateur impliqué), ainsi que la durée de l’activité. Par exemple, dans l’illustration, un événement Layout (disposition) pour un contrôle de grille prend 57,53 ms.

Pour plus d’informations, consultez Chronologie de l’application.

Examiner les événements d’accessibilité et de performances de l’IU (UWP)

Dans vos applications UWP, vous pouvez activer Analyse de l’IU dans la fenêtre Outils de diagnostic. L’outil recherche les problèmes de performances ou d’accessibilité et les affiche dans la vue Événements pendant le débogage. Les descriptions des événements fournissent des informations qui peuvent aider à résoudre les problèmes.

Afficher les événements d’analyse de l’interface utilisateur dans les Outils de diagnostic

Afficher les événements d’analyse de l’interface utilisateur dans les Outils de diagnostic

Analyser l’utilisation du GPU (Direct3D)

Dans les applications Direct3D (les composants Direct3D doivent être en C++), vous pouvez examiner l’activité sur le GPU et analyser les problèmes de performances. Pour plus d’informations, consultez Utilisation du GPU. Pour utiliser l’outil, choisissez Utilisation du GPU dans le profileur de performances, puis choisissez Démarrer. Dans votre application, effectuez le scénario à profiler, puis choisissez Arrêter la collecte pour générer un rapport.

Quand vous sélectionnez une période de temps dans les graphiques et que vous choisissez Afficher les détails, une vue détaillée s’affiche dans le volet inférieur. Dans la vue détaillée, vous pouvez consulter le volume d’activité qui se produit sur chaque UC et GPU. Sélectionnez les événements dans le volet inférieur pour afficher des fenêtres contextuelles dans la chronologie. Par exemple, sélectionnez l’événement Présent pour afficher les fenêtres contextuelles des appels Présent. (Les lignes VSync verticales gris clair peuvent être utilisées comme référence pour déterminer si certains appels Present ont manqué la synchronisation VSync. Il doit y avoir un appel Présent entre deux VSync pour que l’application atteigne régulièrement 60 IPS.)

Outil de profilage – Utilisation du GPU

Outil de profilage – Utilisation du GPU

Vous pouvez également utiliser les graphiques pour déterminer la présence éventuelle de goulots d’étranglement liés à l’UC ou au GPU.

Analyser les performances (outils hérités)

Dans Visual Studio 2019, l’Explorateur de performances hérité et les outils de profilage associés, comme l’Assistant Performances, ont été intégrés au Profileur de performances, que vous pouvez ouvrir avec Débogage>Profileur de performances. Dans le profileur de performances, les outils de diagnostic disponibles dépendent de la cible choisie et du projet de démarrage ouvert actuel. L’outil Utilisation du processeur fournit la fonctionnalité d’échantillonnage précédemment prise en charge dans l’Assistant Performances. L’outil Instrumentation fournit la fonctionnalité de profilage instrumenté (pour des nombres et des durées d’appels précis) qui se trouvait dans l’Assistant Performances. Des outils de mémoire supplémentaires s’affichent également dans le Profileur de performances.

Outil Explorateur de performances