Analyser l’utilisation de la mémoire sans le débogueur de Visual StudioAnalyze memory usage without the Visual Studio debugger

Vous pouvez utiliser l’outil Utilisation de la mémoire sans débogage pour effectuer les opérations suivantes :You can use the Memory Usage tool without debugging to do the following

  • Surveiller l'utilisation de mémoire de vos applications directement dans Visual Studio quand vous développez un scénario.Monitor your app's memory use right in Visual Studio while you are developing a scenario.

  • Créer des instantanés détaillés de l’état de la mémoire de votre application.Create detailed snapshots of the state of your app's memory.

  • Comparer des instantanés pour trouver la cause initiale des problèmes de mémoire.Compare snapshots to find the root cause of memory issues.

    Cette rubrique explique comment utiliser l’outil Utilisation de la mémoire pour analyser une application XAML UWP.This topic describes how use the Memory Usage tool to analyze a UWP XAML app. Si vous voulez analyser l’utilisation de la mémoire d’une application UWP qui utilise JavaScript et HTML, consultez Analyser l’utilisation de la mémoire (JavaScript).If you want to analyze memory use in UWP app that uses JavaScript and HTML, see Analyze memory usage (JavaScript).

Démarrer une session de diagnostic d’utilisation de la mémoireStart a Memory Usage diagnostic session

  1. Ouvrez un projet Windows universel C# dans Visual Studio.Open a C# Universal Windows project in Visual Studio.

  2. Dans la barre de menus, choisissez Déboguer > Profileur de performances.On the menu bar, choose Debug > Performance Profiler.

  3. Sélectionnez Utilisation de la mémoire, puis choisissez le bouton Démarrer situé en bas de la page.Select Memory Usage and then choose the Start button at the bottom of the page.

    Démarrer une session de diagnostic d’utilisation de la mémoireStart a Memory Usage diagnostic session

Surveiller l’utilisation de la mémoireMonitor memory use

Même si vous pouvez utiliser l’outil Utilisation de la mémoire pour générer des rapports détaillés permettant d’identifier et de corriger des problèmes, il permet également d’étudier les effets en temps réel sur la mémoire d’un scénario que vous développez activement.Although you can use the Memory Usage tool to generate detailed reports that you can use to find and fix issues, you can also use it to study the real-time memory effects of a scenario you're actively developing.

Quand vous démarrez une session de diagnostic, votre application démarre et la page Outils de diagnostic affiche un graphique chronologique de l’utilisation de la mémoire par votre application.When you start a diagnostic session, your app starts and the Diagnostic Tools window displays a timeline graph of your app's memory use.

Page de vue d’ensemble de l’utilisation de mémoireMemory Usage overview page

Le graphique chronologique montre les fluctuations de la mémoire de votre application pendant son exécution.The timeline graph shows fluctuations in your app's memory as it runs. Les pointes du graphique indiquent généralement que du code collecte ou crée des données, puis les supprime une fois le traitement terminé.Spikes in the graph usually indicate that some code is collecting or creating data and then discarding it when the processing is done. Les pointes prononcées indiquent des zones que vous pourriez optimiser.Large spikes indicate areas that you might be able to optimize. Une hausse de la consommation de mémoire sans retour est plus préoccupante, car elle peut indiquer une utilisation inefficace de la mémoire ou une fuite de mémoire.Of more concern is a rise in memory consumption that's not returned because it may indicate inefficient memory use or even a memory leak.

Fermer une session de surveillanceClose a monitoring session

Arrêter la collecteStop collection

Pour arrêter une session de surveillance sans créer de rapport, fermez simplement la fenêtre de diagnostic.To stop a monitoring session without creating a report, just close the diagnostic window. Pour générer un rapport quand vous avez créé des instantanés de la mémoire, choisissez Arrêter.To generate a report when you have taken memory snapshots, choose Stop.

Créer des instantanés de l’état de la mémoire de votre applicationTake snapshots of the memory state of your app

Si vous détectez un problème de mémoire que vous voulez examiner, vous pouvez prendre des instantanés pendant la session de diagnostic pour capturer des objets dans la mémoire à des moments précis.If you discover a memory issue that you want to investigate, you can take snapshots during the diagnostic session to capture objects in memory at particular moments. Dans la mesure où une application utilise un grand nombre de plusieurs types d'objets, il peut être utile de concentrer votre analyse sur un seul scénario.Because an app uses a large number of many types of objects, you might want to concentrate your analysis on one scenario. Il peut être également utile de disposer d’un instantané de référence de l’application avant qu’un problème de mémoire ne se produise, d’un autre instantané après la première occurrence du problème et d’un ou plusieurs instantanés supplémentaires si vous pouvez répéter le scénario.It's also a good idea to get a baseline snapshot of the app before a memory issue appears, another snapshot after the first occurrence of the problem, and one or more additional snapshots if you can repeat the scenario.

Pour collecter des instantanés, démarrez une nouvelle session de diagnostic.To collect snapshots, start a new diagnostic session. Choisissez Prendre un instantané quand vous voulez capturer les données de mémoire.Choose Take Snapshot when you want to capture the memory data. Pour générer un rapport, choisissez Arrêter.To generate a report, choose Stop.

Page de vue d’ensemble de l’utilisation de la mémoireMemory Usage overview page

Une fois que vous avez arrêté la collection des données, l’outil Utilisation de la mémoire arrête l’application et affiche le rapport de vue d’ensemble.After you stop data collection, the Memory Usage tool stops the app and displays the overview report.

Page de vue d’ensemble de l’utilisation de mémoireMemory Usage overview page

Vues d’instantanés d’utilisation de la mémoireMemory Usage snapshot views

Vous utilisez les vues d'instantanés pour ouvrir des rapports détaillés dans de nouvelles fenêtres Visual Studio.You use snapshot views to open detailed reports in new Visual Studio windows. Il existe deux types de vues d'instantanés :There are two kinds of snapshot views:

Étape 1Step 1 Le texte du lien indique le nombre total d'octets dans la mémoire au moment où l'instantané a été pris.The link text shows the total number of bytes in memory when the snapshot was taken.

Choisissez ce lien pour afficher un rapport détaillé de l'instantané, trié selon la taille totale des instances du type.Choose this link to display a snapshot details report that's sorted by the total size of the type instances.
Étape 2Step 2 Le texte du lien indique le nombre total d'objets dans la mémoire au moment où l'instantané a été pris.The link text shows the total number of objects in memory when the snapshot was taken.

Choisissez ce lien pour afficher un rapport détaillé de l'instantané, trié selon le nombre total d'instances des types.Choose this link to display a snapshot details report that's sorted by the count of instances of the types.
Étape 3Step 3 Le texte du lien indique la différence entre la taille totale des objets dans la mémoire au moment de l'instantané et la taille totale de l'instantané précédent.The link text shows the difference between the total size of objects in memory at the moment of this snapshot and the total size of the previous snapshot.

Le texte du lien est un nombre positif quand la taille de la mémoire de cet instantané est supérieure à celle du précédent, et un nombre négatif quand la taille est inférieure.The link text is a positive number when the memory size of this snapshot is larger than the previous one, and a negative number when the size is smaller. Le texte du lien Planning de référence indique que cet instantané est le premier de la session de diagnostic. Aucune différence indique que la différence est nulle.The link text Baseline indicates that this snapshot is the first in the diagnostic session; No Difference indicates that the difference is zero.

Choisissez ce lien pour afficher un rapport différentiel des instantanés, trié selon la différence de taille totale des instances des types.Choose this link to display a snapshot diff report that's sorted by the difference in the total size of instances of the types.
Étape 4Step 4 Le texte du lien indique la différence entre le nombre total d'objets mémoire dans cet instantané et le nombre d'objets de l'instantané précédent.The link text shows the difference between the total number of memory objects in this snapshot and the number of objects in the previous snapshot.

Choisissez ce lien pour afficher un rapport différentiel des instantanés, trié selon le nombre total d'instances des types.Choose this link to display a snapshot diff report that's sorted by the difference in the total count of instances of the types.

Rapports d’instantanéSnapshot reports

Rapport d’instantané d’utilisation de la mémoireMemory Usage snapshot report

Arborescences de rapport d’instantanéSnapshot report trees

Tas managéManaged Heap

Les arborescences de tas managé Arborescence Tas managé (détails de l’instantané) et Arborescence Tas managé (comparaison d’instantanés) indiquent les types et instances présents dans le rapport.The managed heap tree Managed Heap tree (Snapshot details) and the Managed Heap tree (Snapshot diff) show the types and instances in the report. La sélection d’un type ou d’une instance affiche les arborescences Chemins d’accès à la racine et Objets référencés pour l’élément sélectionné.Selecting a type or instance displays the Paths to Root and Referenced Objects trees for the selected item.

Chemins d’accès à la racinePaths to Root

L’arborescence Chemins d’accès à la racine (détails de l’instantané) et l’arborescence Chemins d’accès à la racine (comparaison d’instantanés) affichent la chaîne d’objets qui font référence au type ou à l’instance.The Paths to Root tree (Snapshot details) and the Paths to Root tree (Snapshot diff) show the chain of objects that reference the type or instance. Le récupérateur de mémoire .NET Framework nettoie la mémoire d’un objet uniquement quand toutes les références à cet objet ont été libérées.The .NET Framework garbage collector cleans up the memory for an object only when all references to it have been released.

Objets référencésReferenced Objects

L’arborescence Objets référencés (détails de l’instantané) et l’arborescence Objets référencés (comparaison d’instantanés) affichent les objets auxquels l’instance ou le type sélectionné fait référence.The Referenced Objects tree (Snapshot details) and the Referenced Objects tree (Snapshot diff) show the objects that the selected type or instance references.

Champs Type d’objet et InstanceObject Type and Instance fields

Quand une entrée Type d’objet comporte des entrées enfants, vous pouvez choisir l’icône fléchée pour les afficher.When an Object Type entry has child entries, you can choose the arrow icon to display them. Si la couleur du texte Type d’objet est bleue, vous pouvez le choisir pour accéder à l’objet dans son fichier de code source.If the color of the Object Type text is blue, you can choose it to navigate to the object in its source code file. Le fichier source s'ouvre dans une fenêtre séparée.The source file is opened in a separate window.

Les noms d'instance sont des ID uniques générés par l'outil Utilisation de la mémoire.Instance names are unique IDs that are generated by the Memory Usage tool.

Si vous notez un type difficilement identifiable ou que vous ne savez pas de quelle façon il est impliqué dans votre code, il s’agit probablement d’un objet du .NET Framework, du système d’exploitation ou du compilateur que l’outil Utilisation de la mémoire affiche, car il est impliqué dans les chaînes de propriétés de vos objets.If you notice a type that you can't easily identify or if you don't know how it's involved in your code, it's probably an object from the .NET Framework, operating system, or compiler that the Memory Usage tool displays because it's involved in the ownership chains of your objects.

Filtres des arborescences de rapportReport tree filters

La plupart des applications contiennent un très grand nombre de types, dont une majorité n'est pas très utile au développeur d'application.Most apps contain a surprisingly large number of types, most of which are not very interesting to the app developer. L’outil Utilisation de la mémoire définit deux filtres permettant de masquer la plupart de ces types dans les arborescences Tas managé et Chemins d’accès à la racine.The Memory Usage tool defines two filters that you can use to hide most of these types in the Managed Heap and Paths to Root trees. Vous pouvez également filtrer une arborescence par nom de type.You can also filter a tree by type name.

Options de tri et de filtreSort and filter options

FiltreFilter

Entrez une chaîne dans la zone Filtre pour restreindre l’affichage des arborescences aux types qui contiennent le texte spécifié.Enter a string in the Filter box to restrict the tree displays to types that contain the specified text. Le filtre n'est pas sensible à la casse et reconnaît la chaîne spécifiée dans toutes les parties des noms de type.The filter is not case-sensitive, and it recognizes the specified string in any part of the type names.

Réduire les petits objetsCollapse Small Objects

Quand ce filtre est appliqué, les types dont la Taille (octets) est inférieure à 0,5 % de la taille totale de la mémoire de l’instantané sont masqués dans la liste Tas managé.When this filter is applied, types whose Size (Bytes) is less than 0.5 percent of the total size of the snapshot memory are hidden in the Managed Heap list.

Uniquement mon codeJust My Code

Le filtre Uniquement mon code masque la plupart des instances générées par du code externe.The Just My Code filter hides most instances that are generated by external code. Les types externes sont détenus par le système d'exploitation ou les composants Framework. Ils peuvent aussi être générés par le compilateur.External types are owned by the operating system or by Framework components, or are generated by the compiler.

Rapports détaillés d’instantanéSnapshot details reports

Vous utilisez un rapport détaillé d'instantané pour vous concentrer sur un seul instantané d'une session de diagnostic.You use a snapshot details report to focus on one snapshot from a diagnostic session. Pour ouvrir un rapport détaillé, choisissez l'un des deux liens dans une vue d'instantané, comme indiqué dans l'image suivante.To open a details report, choose one of the links in a snapshot view, as shown in the following picture. Les deux liens ouvrent le même rapport. La seule différence concerne l’ordre de tri de départ de l’arborescence Tas managé dans le rapport.Both links open the same report; the only difference is the starting sort order of the Managed Heap tree in the report. Dans les deux cas, vous pouvez modifier l'ordre de tri après ouverture du rapport.In both cases, you can change the sort order after the report opens.

Liens vers le rapport d’instantané dans une vue InstantanéLinks to snapshot report in a snapshot view

  • Le lien Mo trie le rapport en fonction de la colonne Taille inclusive (octets).The MB link sorts the report by the Inclusive Size (Bytes) column.

  • Le lien objets trie le rapport en fonction de la colonne Nombre.The objects link sorts the report by the Count column.

Arborescence Tas managé (détails de l’instantané)Managed Heap tree (Snapshot details)

L’arborescence Tas managé répertorie les types d’objets contenus dans la mémoire.The Managed Heap tree lists the types of objects that are held in memory. Vous pouvez développer le nom d’un type pour afficher les dix instances du type les plus volumineuses, triées par taille.You can expand a type name to view the ten largest instances of the type, sorted by size. La sélection d’un type ou d’une instance affiche les arborescences Chemins d’accès à la racine et Objets référencés pour l’élément sélectionné.Selecting a type or instance displays the Paths to Root and Referenced Objects trees for the selected item.

Arborescence Tas managéManaged Heap tree

Type d’objetObject Type Nom du type ou instance de l'objet.The name of the type or object instance.
NombreCount Nombre d'instances d'objet du type.The number of object instances of the type. Le nombre est toujours égal à 1 pour une instance.The number is always 1 for an instance.
Taille (octets)Size (Bytes) Pour un type, taille de toutes les instances du type dans l'instantané de la mémoire, sans compter la taille des objets contenus dans les instances.For a type, the size of all instances of the type in the memory snapshot, excluding the size of objects contained in the instances.

Pour une instance ou un type, taille de l'objet sans compter la taille des objets contenus dans l'instance.For an instance, type, the size of the object excluding the size of objects contained in the instance. instances.instances.
Taille inclusive (octets)Inclusive Size (Bytes) Taille des instances du type ou taille d'une seule instance, y compris la taille des objets contenus.The size of the instances of the type or the size of a single instance, including the size of contained objects.

Arborescence Chemins d’accès à la racine (détails de l’instantané)Paths to Root tree (Snapshot details)

L’arborescence Chemins d’accès à la racine indique la chaîne d’objets faisant référence au type ou à l’instance.The Paths to Root tree shows the chain of objects that reference the type or instance. Le récupérateur de mémoire .NET Framework nettoie la mémoire d’un objet uniquement quand toutes les références à cet objet ont été libérées.The .NET Framework garbage collector cleans up the memory for an object only when all references to it have been released.

Arborescence Chemins d’accès à la racine pour les typesPaths to Root tree for Types

Quand vous affichez un type dans l’arborescence Chemins d’accès à la racine, le nombre d’objets des types qui comportent des références à ce type est affiché dans la colonne Nombre de références.When you view a type in the Paths to Root tree, the number of objects of the types that hold references to that type is displayed in the Reference Count column. La colonne n'apparaît pas quand vous analysez une instance.The column does not appear when you analyze an instance.

Arborescence Objets référencés (détails de l’instantané)Referenced Objects tree (Snapshot details)

L’arborescence Objets référencés indique les objets référencés par le type ou l’instance sélectionnés.The Referenced Objects tree shows the objects that the selected type or instance references.

Arborescence des objets référencés pour les instancesReferenced Objjects tree for instances

Type d’objet/InstanceObject Type / Instance Nom du type ou instance de l'objet.The name of the type or object instance.
Taille (octets)Size (Bytes) Pour un type, taille de toutes les instances du type, sans compter la taille des objets contenus dans le type.For a type, the size of all instances of the type, excluding the size of objects contained in the type.

Pour une instance, taille de l'objet, sans compter la taille des objets contenus dans l'objet.For an instance, the size of the object, excluding the size of objects contained in the object.
Taille inclusive (octets)Inclusive Size (Bytes) Taille totale des instances du type ou taille de l'instance, y compris la taille des objets contenus.The total size of the instances of the type or the size of the instance, including the size of contained objects.

Rapports différentiels d’instantanésSnapshot difference (diff) reports

Un rapport différentiel d'instantanés indique les modifications entre un instantané principal et l'instantané qui a été pris immédiatement avant.A snapshot difference (diff) report shows the changes between a primary snapshot and the snapshot that was taken immediately before it. Pour ouvrir un rapport différentiel, choisissez l'un des deux liens dans une vue d'instantané, comme indiqué dans l'image suivante.To open a diff report, choose one of the links in a snapshot view, as shown in the following picture. Les deux liens ouvrent le même rapport. La seule différence concerne l’ordre de tri de départ de l’arborescence Tas managé dans le rapport.Both links open the same report; the only difference is the starting sort order of the Managed Heap tree in the report. Vous pouvez modifier l'ordre de tri après ouverture du rapport.You can change the sort order after the report opens.

Liens vers le rapport de différences dans une vue InstantanéLinks to difference report in a snapshot view

  • Le lien Mo trie le rapport en fonction de la colonne Taille inclusive (octets).The MB link sorts the report by the Inclusive Size (Bytes) column.

  • Le lien objets trie le rapport en fonction de la colonne Nombre.The objects link sorts the report by the Count column.

Arborescence Tas managé (comparaison d’instantanés)Managed Heap tree (Snapshot diff)

L’arborescence Tas managé répertorie les types d’objets contenus dans la mémoire.The Managed Heap tree lists the types of objects that are held in memory. Vous pouvez développer le nom d’un type pour afficher les dix instances du type les plus volumineuses, triées par taille.You can expand a type name to view the ten largest instances of the type, sorted by size. La sélection d’un type ou d’une instance affiche les arborescences Chemins d’accès à la racine et Objets référencés pour l’élément sélectionné.Selecting a type or instance displays the Paths to Root and Referenced Objects trees for the selected item.

Arborescence Tas managé pour un type dans le rapport différentielManaged Heap tree for a type in difference report

Notez que les colonnes Nombre, Taille (octets) et Taille inclusive (octets) ont été réduites dans l’image.Notice that the Count, Size (Bytes), and Inclusive Size (Bytes) columns have been collapsed in the picture.

Type d’objetObject Type Nom du type ou instance de l'objet.The name of the type or object instance.
NombreCount Nombre d'instances d'un type dans l'instantané principal.The number of instances of a type in the primary snapshot. La valeur Nombre est toujours égale à 1 pour une instance.Count is always 1 for an instance.
Différence de nombreCount Diff Pour un type, différence du nombre d'instances du type entre l'instantané principal et l'instantané précédent.For a type, the difference in the number of instances of the type between the primary snapshot and the previous snapshot. Le champ est vide pour une instance.The field is blank for an instance.
Taille (octets)Size (Bytes) Taille des objets dans l'instantané principal, sans compter la taille des objets contenus dans les objets.The size of the objects in the primary snapshot, excluding the size of objects contained in the objects. Pour un type, Taille (octets) et Taille inclusive (octets) sont les totaux des tailles des instances du type.For a type, Size (Bytes) and Inclusive Size (Bytes) are the totals of the sizes of the type instances.
Diff. taille totale (octets)Total Size Diff (Bytes) Pour un type, différence de taille totale des instances du type entre l'instantané principal et l'instantané précédent, sans compter la taille des objets contenus dans les instances.For a type, the difference in the total size of instances of the type between the primary snapshot and the previous snapshot, excluding the size of objects contained in the instances. Le champ est vide pour une instance.The field is blank for an instance.
Taille inclusive (octets)Inclusive Size (Bytes) Taille des objets dans l'instantané principal, y compris la taille des objets contenus dans les objets.The size of the objects in the primary snapshot, including the size of objects contained in the objects.
Diff. de taille inclusive (octets)Inclusive Size Diff (Bytes) Pour un type, différence de taille de toutes les instances du type entre l'instantané principal et l'instantané précédent, y compris la taille des objets contenus dans les objets.For a type, the difference in the size of all instances of the type between the primary snapshot and the previous snapshot, including the size of objects contained in the objects. Le champ est vide pour une instance.The field is blank for an instance.

Arborescence Chemins d’accès à la racine (comparaison d’instantanés)Paths to Root tree (Snapshot diff)

L’arborescence Chemins d’accès à la racine indique la chaîne d’objets faisant référence au type ou à l’instance.The Paths to Root tree shows the chain of objects that reference the type or instance. Le récupérateur de mémoire .NET Framework nettoie la mémoire d’un objet uniquement quand toutes les références à cet objet ont été libérées.The .NET Framework garbage collector cleans up the memory for an object only when all references to it have been released.

Arborescence Chemins d’accès à la racine pour les instances dans une vue de comparaisonPaths To Root tree for instances in a diff view

Arborescence Objets référencés (comparaison d’instantanés)Referenced Objects tree (Snapshot diff)

L’arborescence Objets référencés indique les objets référencés par le type ou l’instance principaux.The Referenced Objects tree shows the objects that the primary type or instance references.

Arborescence des objets référencés pour les instancesReferenced Objjects tree for instances

Type d’objet/InstanceObject Type / Instance Nom du type ou instance de l'objet.The name of the type or object instance.
Taille (octets)Size (Bytes) Pour une instance, taille de l'objet dans l'instantané principal, sans compter la taille des objets contenus dans l'instance.For an instance, the size of the object in the primary snapshot, excluding the size of objects contained in the instance.

Pour un type, taille totale des instances du type dans l'instantané principal, sans compter la taille des objets contenus dans l'instance.For a type, the total size of the instances of the type in the primary snapshot, excluding the size of objects contained in the instance.
Taille inclusive (octets)Inclusive Size (Bytes) Taille des objets dans l'instantané principal, y compris la taille des objets contenus dans les objets.The size of the objects in the primary snapshot, including the size of objects contained in the objects.

Voir aussiSee also

Mémoire JavaScriptJavaScript memory
Profilage dans Visual StudioProfiling in Visual Studio
Visite guidée des fonctionnalités de profilageProfiling feature tour
Bonnes pratiques pour les performances des applications UWP en C++, C# et Visual Basic Performance best practices for UWP apps using C++, C#, and Visual Basic
Diagnostic des problèmes de mémoire avec le nouvel outil Utilisation de la mémoire de Visual StudioDiagnosing memory issues with the new Memory Usage Tool in Visual Studio