Partage via


Instrumentez votre application .NET dans Visual Studio (C#, C++, Visual Basic, F#)

Depuis la sortie de la version 17.5 de Visual Studio 2022, vous pouvez utiliser le nouvel outil dynamique Instrumentation. Cet outil indique le nombre exact de fois où vos fonctions sont appelées et est plus rapide que la version précédente de l’outil Instrumentation. Cet outil prend en charge l’instrumentation .NET Core sans avoir besoin de PDB. À compter de la version 17.6 de Visual Studio 2022 Préversion 2, l’outil prend également en charge C/C++.

Il est similaire à l’outil Utilisation du processeur, sauf qu’il est basé sur le temps de l’horloge plutôt que sur l’utilisation du processeur. Cela signifie que le temps bloqué, tel que le temps passé à attendre des verrous, apparaît dans la trace d’instrumentation (ce qui n’est pas le cas dans l’outil Utilisation du processeur). Pour plus d’informations sur l’apprentissage de l’utilisation efficace de l’outil Instrumentation, consultez Vue d’ensemble de l’instrumentation et Étude de cas : isoler un problème de performance.

Instrumenter votre application

  1. Sélectionnez Alt+F2 (ou Déboguer > Profileur de performances) pour ouvrir le profileur de performances dans Visual Studio.

  2. Cochez la case Instrumentation.

    Capture d’écran montrant l’outil d’instrumentation sélectionné.

    Si vous activez l’option Démarrer avec la collecte suspendue avant de démarrer le profileur, les données ne sont pas collectées tant que vous ne sélectionnez pas le bouton Enregistrer dans la vue de session de diagnostic.

    Note

    Si vous ne pouvez pas sélectionner l’outil, décochez la case de tous les autres outils, car certains outils doivent s’exécuter seuls. Pour en savoir plus sur l’exécution d’outils ensemble, consultez Utilisation simultanée de plusieurs outils du profileur.

    Si l’outil n’est toujours pas disponible, vérifiez que votre projet répond aux exigences précédentes. Vérifiez que votre projet est en mode Mise en production pour capturer les données les plus précises possible.

  3. Sélectionnez le bouton Démarrer pour exécuter l’outil.

  4. Sélectionnez les éléments de votre programme à instrumenter.

    fr-FR: Capture d’écran montrant la boîte de dialogue Sélectionner des éléments à instrumenter.

    À compter de Visual Studio 2022 version 17.11, le profileur conserve les éléments sélectionnés pour l’exécution suivante du profilage.

    À compter de Visual Studio 2022 version 17.13 Preview 1, vous pouvez sélectionner des éléments à instrumenter pour C++.

  5. Sélectionnez OK.

  6. Une fois que l’outil a commencé à s’exécuter, parcourez le scénario à profiler dans votre application. Sélectionnez ensuite Arrêter la collection ou fermez l’application pour afficher vos données.

Analyser le rapport d'instrumentation

Vos données de profilage s’affichent dans Visual Studio.

Capture d’écran montrant les données d'instrumentation .NET.

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

Cliquez sur une fonction qui vous intéresse et vous obtiendrez une vue plus détaillée.

Les données disponibles sont similaires à l'outil d'utilisation du processeur, sauf qu'elles sont basées sur le temps réel et le compte des appels au lieu de l'utilisation du processeur.

Analyser les aperçus

Si des insights apparaissent dans la section Insights principaux, utilisez le lien fourni pour obtenir plus d’informations sur le problème identifié. Pour plus d’informations, consultez Insights sur l’UC, mais sachez que les informations relatives à l’outil Instrumentation sont spécifiques à l’heure de l’horloge murale et non à l’utilisation du processeur.

En outre, si vous utilisez Copilot, utilisez le bouton Demander à Copilot pour ouvrir la fenêtre de conversation Copilot, et Copilot fournira des suggestions en fonction d’un examen de votre code et de tous les problèmes identifiés.

Analyser des rapports détaillés sur l’instrumentation

Pour analyser le rapport Instrumentation, cliquez sur Ouvrir les détails, ou cliquez sur l’une des fonctions principales pour ouvrir la vue Fonctions.

Le rapport fournit différentes vues des données de diagnostic :

Afficher Description
Appelant/appelé Vue détaillée du temps passé dans une fonction spécifique, la ou les fonctions qui l’ont appelées et les fonctions qu’elle appelle. Les données de performances sont agrégées pour la période de collecte de données. Vous pouvez sélectionner des fonctions d'appel et des fonctions appelées pour parcourir le chemin d'appel.
Arborescence des appels Vue hiérarchique du chemin d'appel de fonction. Permet d’identifier les chemins d'appel qui prennent le plus de temps (chemin critique).
Modules Vue du temps passé dans des modules individuels, agrégés au cours de la période de collecte de données. Permet d’identifier les modules susceptibles d’être des goulots d’étranglement des performances en raison d’une combinaison de nombres d’appels élevés et/ou de problèmes de performances.
Fonctions Vue du temps passé dans des fonctions individuelles, agrégées au cours de la période de collecte de données. Permet d’identifier les fonctions susceptibles d’être des goulots d’étranglement des performances en raison d’une combinaison de nombres d’appels élevés et/ou de problèmes de performances.
Graphique de flamme Vue hiérarchique du chemin d'appel de fonction dans une visualisation de graphique de flamme. Permet d’identifier les chemins d'appel qui prennent le plus de temps (chemin critique).

Dans toutes les vues, à l'exception de l'appelant/appelé, le rapport de diagnostic est trié par Total [unité, %], du plus élevé au plus bas. Changez l’ordre de tri ou la colonne de tri en sélectionnant les en-têtes de colonnes. Vous pouvez double-cliquer sur une fonction qui vous intéresse, et vous verrez la source de la fonction ainsi qu'une mise en évidence qui montre où le temps est passé dans cette fonction. Le tableau contient des colonnes avec des données comme le temps passé dans la fonction, y compris les fonctions appelées (Total), et une deuxième colonne qui montre le temps passé dans une fonction, à l’exclusion des fonctions appelées (Exclusif).

Ces données peuvent vous aider à évaluer si la fonction elle-même est un goulot d’étranglement. Déterminez la quantité de données que la méthode affiche pour voir si le code ou les bibliothèques d'exécution tiers sont la raison pour laquelle vos points de terminaison sont lents ou leur consommation élevée de ressources.

Pour plus d'informations sur l'utilisation du Flame Graph, consultez Identifier les chemins chauds avec le Flame Graph.

Arborescence des appels d’instrumentation

Pour afficher l’arborescence des appels, sélectionnez le nœud parent dans le rapport. Par défaut, la page Instrumentation s’ouvre sur la vue appelant/appelé. Dans la liste déroulante Affichage actuel, sélectionnez Arborescence des appels. L’arborescence des appels peut vous aider à identifier rapidement les goulots d’étranglement des performances.

Vous pouvez cliquer sur les boutons Développer le chemin réactif et Afficher le chemin réactif pour afficher les appels de fonction qui utilisent le plus de temps d'horloge dans l’arborescence des appels.

Capture d'écran qui montre la structure de l'arborescence des appels.

Voici plus d’informations sur les valeurs de colonne :

  • Le total indique combien de temps a été passé dans la fonction et toutes les fonctions appelées par elle. Des valeurs Total élevées indiquent les fonctions qui consomment le plus de temps d'horloge.

  • Self indique combien de temps a été passé dans le corps de la fonction, à l'exclusion du temps passé dans les fonctions qui ont été appelées par celui-ci. Les valeurs élevées pour Self peuvent indiquer un goulot d'étranglement des performances au sein de la fonction.

  • Le nombre d'appels indique le nombre de fois qu'une fonction est appelée.

  • Module Le nom du module contenant la fonction.

Appels asynchrones dans l'arborescence des appels d'instrumentation (.NET)

À partir de Visual Studio 2022 version 17.13 Preview 2, les vues représentant une arborescence d'appels visuels imbriquent les appels asynchrones .NET sous les fonctions à partir desquelles l'appel asynchrone a été fait, ce qui facilite le suivi du flux d'exécution dans une seule trace de pile unifiée. Cela peut vous aider à identifier rapidement les goulots d’étranglement des performances.

L’arborescence des appels de procédure unifiée s’affiche dans l’Arborescence des appels et la section Chemin chaud de la page Résumé. Les nœuds asynchrones apparaissent avec le descripteur [appel asynchrone].

Capture d’écran montrant l’arborescence des appels pour les appels asynchrones.

Vous pouvez activer ou désactiver l'affichage d'une pile d'appels asynchrones assemblée en sélectionnant Assembler les piles asynchrones à partir de l’option Filtre dans la vue Résumé du profileur. Le paramètre est activé par défaut.

Capture d’écran montrant l’option Stick Async Stacks.