Profiler les performances de votre application dans Visual StudioProfile application performance in Visual Studio

Vous pouvez utiliser les outils de profilage de Visual Studio pour analyser les problèmes de performances dans votre application.You can use Visual Studio profiling tools to analyze performance issues in your application. Cette procédure montre comment utiliser l’onglet Utilisation de l’UC des outils de diagnostics pour obtenir les données de performances de votre application.This procedure shows how to use CPU Usage tab of the Diagnostics Tools to obtain performance data for your app. Les outils de diagnostics sont pris en charge pour le développement .NET dans Visual Studio (y compris ASP.NET) et pour le développement natif/C++.The Diagnostics Tools are supported for .NET development in Visual Studio, including ASP.NET, and for native/C++ development.

Quand le débogueur est suspendu, l’outil Utilisation de l’UC collecte les informations relatives aux fonctions qui s’exécutent dans votre application.When the debugger pauses, the CPU Usage tool collects information about the functions that are executing in your application. L’outil répertorie les fonctions qui ont effectué un travail et fournit un graphique chronologique que vous pouvez utiliser pour examiner des segments spécifiques d’une session d’échantillonnage.The tool lists the functions that were performing work, and provides a timeline graph you can use to focus on specific segments of the sampling session.

Le hub de diagnostic propose de nombreuses autres options pour exécuter et gérer votre session de diagnostic.The Diagnostic hub offers you a lot of other options to run and manage your diagnostics session. Si l’outil Utilisation de l’UC ne vous fournit pas les données dont vous avez besoin, les autres outils de profilage fournissent des types d’informations différents qui peuvent vous être utiles.If CPU Usage does not give you the data that you need, the other profiling tools provide different kinds of information that might be helpful to you. Dans de nombreux cas, le goulot d’étranglement des performances de votre application peut ne pas provenir de votre processeur, mais de la mémoire, de l’interface utilisateur de rendu ou du temps de requête réseau.In many cases, the performance bottleneck of your application may be caused by something other than your CPU, such as memory, rendering UI, or network request time. Le hub de diagnostic vous offre de nombreuses autres options pour enregistrer et analyser ce type de données.The Diagnostics hub offers you a lot of other options to record and analyze this kind of data.

Icône représentant une caméra pour les vidéosmovie camera icon for video Regardez une vidéo sur l’utilisation des outils de diagnostics qui montre comment analyser l’utilisation de l’UC et l’utilisation de la mémoire.Watch a video on using the diagnostics tools that shows how to analyze CPU usage and how to analyze memory usage.

Dans cet article, nous allons décrire l’analyse de l’utilisation de l’UC dans un flux de travail de débogage normal.In this article, we'll discuss analyzing CPU usage in your normal debugging workflow. Vous pouvez également analyser l’utilisation et l’UC sans débogueur ou en ciblant une application en cours d’exécution. Pour plus d’informations, consultez la section Recueillir des données de profilage sans débogage sur la page Exécuter des outils de profilage avec ou sans débogueur.You can also analyze CPU usage without a debugger attached or by targeting a running app - for more information see Collect profiling data without debugging in Run profiling tools with or without the debugger.

Note

Pour .NET Core et ASP.NET Core, l’outil Utilisation de l’UC ne fournit pas de résultats précis avec les fichiers PBD portables.For .NET Core and ASP.NET Core, the CPU Usage tool currently does not provide accurate results with portable PBDs. Utilisez des fichiers PDB complets à la place.Use full PDBs instead.

Dans ce didacticiel, vous allez effectuer les actions suivantes :In this tutorial, you will:

  • Collecter les données d'utilisation de l'UCCollect CPU usage data
  • Analyser les données d’utilisation de l’UCAnalyze CPU usage data

Étape 1 : Collecter les données de profilageStep 1: Collect profiling data

  1. Ouvrez le projet que vous voulez déboguer dans Visual Studio, puis définissez un point d’arrêt dans votre application à l’endroit où vous souhaitez examiner l’utilisation du processeur.Open the project you want to debug in Visual Studio and set a breakpoint in your app at the point where you want to examine CPU usage.

  2. Définissez un deuxième point d’arrêt à la fin de la fonction ou de la région de code que vous souhaitez analyser.Set a second breakpoint at the end of the function or region of code that you want to analyze.

    Conseil

    En définissant deux points d’arrêt, vous limitez la collecte de données aux sections de code que vous souhaitez analyser.By setting two breakpoints, you can limit data collection to the parts of code that you want to analyze.

  3. La fenêtre Outils de diagnostic apparaît automatiquement, sauf si vous l’avez désactivée.The Diagnostic Tools window appears automatically unless you have turned it off. Pour afficher à nouveau la fenêtre, cliquez sur Déboguer / Fenêtres / Afficher les outils de diagnostic.To bring up the window again, click Debug / Windows / Show Diagnostic Tools.

  4. Vous pouvez choisir d’afficher Utilisation de la mémoire, Utilisation de l’UC ou les deux, avec le paramètre Sélectionner les outils de la barre d’outils.You can choose whether to see CPU Usage, Memory Usage, or both, with the Select Tools setting on the toolbar. Si vous exécutez Visual Studio Enterprise, vous pouvez également activer ou désactiver IntelliTrace dans Outils / Options / IntelliTrace.If you are running Visual Studio Enterprise, you can also enable or disable IntelliTrace in Tools / Options / IntelliTrace.

    Afficher les outils de diagnosticsShow Diagnostics Tools

    Nous allons nous intéresser principalement à l’utilisation du processeur. Vérifiez donc que l’outil Utilisation de l’UC est activé (il est activé par défaut).We will mainly be looking at CPU utilization, so make sure that CPU Usage is enabled (it is enabled by default).

  5. Cliquez sur Déboguer / Démarrer le débogage (ou Démarrer dans la barre d’outils, ou F5).Click Debug / Start Debugging (or Start on the toolbar, or F5).

    Lorsque l’application est chargée, la vue Résumé des outils de diagnostics s’affiche.When the app finishes loading, the Summary view of the Diagnostics Tools appears.

    Onglet Résumé des outils de diagnosticsDiagnostics Tools Summary Tab

    Pour plus d’informations sur les événements, consultez Searching and filtering the Events tab of the Diagnostic Tools window.For more information on the events, see Searching and filtering the Events tab of the Diagnostic Tools window

  6. Exécutez le scénario qui doit provoquer le premier point d’arrêt.Run the scenario that will cause your first breakpoint to be hit.

  7. Pendant que le débogueur est suspendu, activez la collecte des données d’utilisation du processeur, puis ouvrez l’onglet Utilisation de l’UC.While the debugger is paused, enable the collection of the CPU Usage data and then open the CPU Usage tab.

    Outils de diagnostics - Activer le profilage de l’UCDiagnostics Tools Enable CPU Profiling

    Quand vous choisissez Enregistrer le profil du processeur, Visual Studio commence à enregistrer vos fonctions, ainsi que la durée de leur exécution.When you choose Record CPU Profile, Visual Studio will begin recording your functions and how much time they take to execute. Vous pouvez uniquement afficher les données collectées lorsque votre application s’interrompt à un point d’arrêt.You can only view this collected data when your application is halted at a breakpoint.

  8. Appuyez sur F5 pour exécuter l’application jusqu’au deuxième point d’arrêt.Hit F5 to run the app to your second breakpoint.

    Vous disposez maintenant de données de performances pour votre application, et plus spécifiquement pour la région de code qui s’exécute entre les deux points d’arrêt.Now, you now have performance data for your application specifically for the region of code that runs between the two breakpoints.

  9. Sélectionnez la région que vous voulez analyser dans la chronologie de l’UC (il doit s’agir d’une région qui affiche des données de profilage).Select the region you're interested in analyzing in the CPU timeline (it must be a region that shows profiling data).

    Outils de diagnostics - Sélection d’un segment de tempsDiagnostics Tools Selecting a Time Segment

    Le profileur commence la préparation des données de thread.The profiler begins preparing thread data. Attendez qu’elle se termine.Wait for it to finish.

    Outils de diagnostics - Préparation des threadsDiagnostics Tools Preparing Threads

    L’outil Utilisation de l’UC affiche le rapport sous l’onglet Utilisation de l’UC.The CPU Usage tool displays the report in the CPU Usage tab.

    Outils de diagnostics - Onglet Utilisation de l’UCDiagnostics Tools CPU Usage Tab

    À ce stade, vous pouvez commencer à analyser les données.At this point, you can begin to analyze the data.

Étape 2 : Analyser les données d’utilisation de l’UCStep 2: Analyze CPU usage data

Nous vous recommandons de commencer à analyser vos données en examinant la liste des fonctions située sous l’onglet Utilisation de l’UC, en identifiant les fonctions qui effectuent la plus grande partie du travail, puis en analysant ces fonctions les unes après les autres.We recommend that you begin analyzing your data by examining the list of functions under CPU Usage, identifying the functions that are doing the most work, and then taking a closer look at each one.

  1. Dans la liste des fonctions, examinez celles qui effectuent le plus de travail.In the function list, examine the functions that are doing the most work.

    Outils de diagnostics - Utilisation de l’UC - Liste des fonctionsDiagnostics Tools CPU Usage Function List

    Conseil

    Les fonctions sont classées par ordre et ce sont celles qui effectuent le plus de travail qui figurent en haut de la liste (elles ne sont pas classées selon leur ordre d’appel).Functions are listed in order starting with those doing the most work (they're not in call order). Ainsi, vous pouvez identifier rapidement les fonctions avec les temps d’exécution les plus longs.This helps you quickly identify the longest running functions.

  2. Dans la liste, double-cliquez sur l’une des fonctions d’application qui effectuent le plus de travail.In the function list, double-click one of your app functions that is doing a lot of work.

    Lorsque vous double-cliquez sur une fonction, la vue Appelant/appelé s’ouvre dans le volet gauche.When you double-click a function, the Caller/Callee view opens in the left pane.

    Outils de diagnostics - Vue Appelant/appeléDiagnostics Tools Caller Callee View

    Dans cette vue, la fonction sélectionnée apparaît dans le titre et dans la zone Fonction active (ici, GetNumber).In this view, the selected function shows up in the heading and in the Current Function box (GetNumber, in this example). La fonction qui a appelé la fonction active s’affiche sur la gauche sous Fonctions appelantes, et toutes les fonctions appelées par la fonction active s’affichent dans la zone Fonctions appelées située à droite.The function that called the current function is shown on the left under Calling Function, and any functions called by the current function are shown in Called Functions box on the right. Vous pouvez sélectionner l’une ou l’autre de ces zones pour modifier la fonction active.(You can select either box to change the current function.)

    Cette vue montre la durée totale (en ms), ainsi que le pourcentage du temps global d’exécution de l’application, nécessaires à l’exécution de la fonction.This view shows you the total time (ms) and the percentage of the overall app running time that the function has taken to complete. La section Corps de la fonction montre également 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.Function Body also shows you the total amount of time (and the percentage of time) spent in the function body excluding time spent in calling and called functions. Dans cet exemple, 3 713 ms sur 3 729 ont été passées dans le corps de la fonction. Les 16 ms restantes ont été passées dans le code externe appelé par cette fonction.(In this example, 3713 out of 3729 ms were spent in the function body, and the remaining 16 ms were spent in external code called by this function).

    Conseil

    Des valeurs élevées dans le corps de la fonction peuvent indiquer un goulot d’étranglement de performances au sein de la fonction.High values in Function Body may indicate a performance bottleneck within the function itself.

  3. Si vous souhaitez afficher une vue plus générale indiquant l’ordre dans lequel les fonctions sont appelées, sélectionnez Arborescence des appels dans la liste déroulante située en haut du volet.If you want to see a higher-level view showing the order in which the functions are called, select Call Tree from the drop-down list at the top of the pane.

    Chaque zone numérotée dans l'illustration est en rapport avec une étape de la procédure.Each numbered area in the figure relates to a step in the procedure.

    Outils de diagnostics - Arborescence des appelsDiagnostics Tools Call Tree

Étape 1Step 1 Le nœud de premier niveau des arborescences d'appels de l'outil Utilisation de l'UC est un pseudo-nœudThe top-level node in CPU Usage call trees is a pseudo-node
Étape 2Step 2 Dans la plupart des applications, quand l'option Afficher le code externe est désactivée, le nœud de deuxième niveau est un nœud [Code externe] contenant le code système et framework qui démarre et arrête l'application, dessine l'interface utilisateur, contrôle la planification des threads et fournit d'autres services de niveau inférieur à l'application.In most apps, when the Show External Code option is disabled, the second-level node is an [External Code] node that contains the system and framework code that starts and stops the app, draws the UI, controls thread scheduling, and provides other low-level services to the app.
Étape 3Step 3 Les enfants du nœud de deuxième niveau sont les méthodes en code utilisateur et des routines asynchrones appelées ou créées par le code système et framework de deuxième niveau.The children of the second-level node are the user-code methods and asynchronous routines that are called or created by the second-level system and framework code.
Étape 4Step 4 Les nœuds enfants d'une méthode contiennent des données seulement pour les appels de la méthode parente.Child nodes of a method contain data only for the calls of the parent method. Lorsque l'option Afficher le Code externe est désactivée, les méthodes d'application peuvent également contenir un nœud [Code externe] .When Show External Code is disabled, app methods can also contain an [External Code] node.

Voici davantage d’informations sur les valeurs de colonne :Here is more information on the column values:

  • La section Total UC (ms) montre la quantité de travail effectué par la fonction et toute autre fonction qu’elle a appelée.Total CPU indicates how much work was done by the function and any functions called by it. Les valeurs d’UC total élevées indiquent les fonctions les plus coûteuses.High total CPU values point to the functions that are most expensive overall.

  • La colonne Processeur auto (ms) indique la quantité de travail effectué par le code dans le corps de la fonction, à l’exception du travail effectué par les fonctions qu’elle a appelées.Self CPU indicates how much work was done by the code in the function body, excluding the work done by functions that were called by it. Des valeurs élevées dans la colonne Processeur auto (ms) peuvent indiquer un goulot d’étranglement des performances au sein de la fonction.High Self CPU values may indicate a performance bottleneck within the function itself.

  • Modules Nom du module contenant la fonction, ou nombre de modules contenant les fonctions dans un nœud [Code externe].Modules The name of the module containing the function, or the number of modules containing the functions in an [External Code] node.

Afficher le code externeView external code

Le code externe correspond aux fonctions des composants système et de framework exécutés par le code que vous écrivez.External code are functions in system and framework components that are executed by the code you write. Le code externe inclut les fonctions qui démarrent et arrêtent l'application, dessinent l'interface utilisateur, contrôlent les threads et fournissent d'autres services de bas niveau à l'application.External code include functions that start and stop the app, draw the UI, control threading, and provide other low-level services to the app. Dans la plupart des cas, vous n’êtes pas intéressé par le code externe. L’outil Utilisation de l’UC regroupe donc les fonctions externes d’une méthode utilisateur au sein d’un même nœud [Code externe].In most cases, you won't be interested in external code, and so the CPU Usage tool gathers the external functions of a user method into one [External Code] node.

Si vous voulez afficher les chemins d’appel du code externe, choisissez Afficher le code externe dans la liste Filtrer la vue, puis Appliquer.If you want to view the call paths of external code, choose Show External Code from the Filter view list and then choose Apply.

Choisir Filtrer l’affichage, puis Afficher le code externeChoose Filter View, then Show External Code

N'oubliez pas que de nombreuses chaînes d'appel en code externe sont profondément imbriquées, la largeur de la colonne Nom de fonction ne peut pas dépasser la largeur d'affichage de presque tous les moniteurs d'ordinateur, sauf les plus larges.Be aware that many external code call chains are deeply nested, so that the width of the Function Name column can exceed the display width of all but the largest of computer monitors. Si tel est le cas, les noms de fonction sont affichés sous forme de […].When this happens, function names are shown as [...].

Utilisez la zone de recherche pour trouver le nœud que vous cherchez, puis utilisez la barre de défilement horizontal pour afficher les données dans la vue.Use the search box to find a node that you are looking for, then use the horizontal scroll bar to bring the data into view.

Conseil

Si vous profilez du code externe qui appelle des fonctions Windows, vous devez vérifier que vous disposez des fichiers .pdb les plus récents.If you profile external code that calls Windows functions, you should make sure that you have the most current .pdb files. Sans ces fichiers, vos vues de rapports répertorient des noms de fonctions Windows cryptés et difficiles à comprendre.Without these files, your report views will list Windows function names that are cryptic and difficult to understand. Pour vérifier si vous disposez des fichiers nécessaires, consultez Spécifier des fichiers de symboles (.pdb) et des fichiers sources dans le débogueur.For more information about how to make sure that you have the files you need, see Specify symbol (.pdb) and source files in the debugger.

Étapes suivantesNext steps

Dans ce didacticiel, vous avez appris comment collecter et analyser les données d’utilisation de l’UC.In this tutorial, you've learned how to collect and analyze CPU usage data. Si vous avez déjà fait la visite guidée du profileur, vous pouvez souhaiter avoir une vue d’ensemble rapide de la manière d’analyser l’utilisation de la mémoire dans vos applications.If you already completed the tour of the profiler, you may want to get a quick look at how to analyze memory usage in your apps.