Analyser l’utilisation de la mémoire à l’aide de l’outil d’allocation d’objets .NET
Vous pouvez voir la quantité de mémoire utilisée par votre application et les chemins d’accès au code qui allouent le plus de mémoire à l’aide de l’outil d’allocation d’objets .NET.
Après avoir exécuté l’outil, vous pouvez voir les chemins d’exécution de fonction où les objets sont alloués. Vous pouvez ensuite effectuer un suivi jusqu’à la racine de l’arborescence des appels qui occupe le plus de mémoire.
Pour obtenir un didacticiel qui montre comment améliorer les performances à l’aide de l’outil d’allocation d’objets .NET, consultez Étude de cas : Guide du débutant pour optimiser le code.
Installation
Sélectionnez Alt+F2 pour ouvrir le Profileur de performances dans Visual Studio.
Cochez la case Suivi d’allocation d’objets .NET.
Sélectionnez le bouton Démarrer pour exécuter l’outil.
Si vous activez l’option Démarrer avec la collecte suspendue avant de démarrer le profileur, les données ne seront collectées que lorsque vous sélectionnez le bouton Enregistrer dans l’affichage de session de diagnostic.
Une fois l’outil en cours d’exécution, parcourez le scénario que vous souhaitez profiler dans votre application. Sélectionnez ensuite Arrêter la collecte ou fermez votre application pour afficher vos données.
Sélectionnez l’onglet Allocation. Les données d’allocation de mémoire similaires à ce qui suit s’affichent.
capture d’écran
Capture d’écran
Vous pouvez maintenant analyser l’allocation de mémoire des objets.
Pendant la collecte, l’outil de suivi peut ralentir l’application profilée. Si les performances de l’outil de suivi ou de l’application sont lentes et si vous n’avez pas besoin de suivre chaque objet, vous pouvez ajuster le taux d’échantillonnage. Pour ce faire, sélectionnez le symbole d’engrenage à côté de l’outil de suivi dans la page récapitulative du profileur.
Ajustez le taux d’échantillonnage à la fréquence souhaitée. Cette modification permet d’accélérer les performances de votre application pendant la collecte et l’analyse.
Pour plus d’informations sur la façon de rendre l’outil plus efficace, consultez Optimisation des paramètres profileur.
Comprendre vos données
Dans l’affichage graphique suivant, le graphique supérieur affiche le nombre d’objets en direct dans votre application. Le graphique en bas montre le delta des objets de l'application, indiquant le pourcentage de changement. Les barres rouges indiquent quand le ramasse-miettes a eu lieu.
Vous pouvez filtrer les données tabulaires pour afficher l’activité uniquement pour un intervalle de temps spécifié en sélectionnant un intervalle de temps. Lorsque vous effectuez cette opération, les informations qui s’affichent dans les onglets sont limitées à l’intervalle de temps filtré.
Vous pouvez également effectuer un zoom avant ou arrière du graphique.
Allocation
La vue Allocation affiche l’emplacement des objets qui allouent de la mémoire et la quantité de mémoire allouée à ces objets.
Les informations suivantes s'affichent dans la vue Allocation :
La colonne Type est une liste de classes et de structures qui occupent de la mémoire. Double-cliquez sur un type pour afficher sa rétroaction sous forme d'arborescence d'appels inversée. Dans la vue Allocation uniquement, vous pouvez voir les éléments de la catégorie sélectionnée qui occupent de la mémoire.
La colonne indique le nombre d'objets occupant la mémoire dans un type ou une fonction d'allocation particulier. Cette colonne apparaît uniquement dans les vues Allocation, Arborescence des appels et Fonctions.
Les colonnes Octets et Taille moyenne (octets) n’apparaissent pas par défaut. Pour les afficher, cliquez avec le bouton droit sur la colonne Type ou Allocations, puis sélectionnez les options Octets et Taille moyenne (octets) pour les ajouter au graphique.
Les deux colonnes sont similaires à Total (Allocations) et Individuel (Allocations), sauf qu’elles indiquent la quantité de mémoire utilisée plutôt que le nombre d’objets qui occupent de la mémoire. Ces colonnes s’affichent uniquement dans la vue Allocation.
La colonne Nom du module affiche le module qui contient la fonction ou le processus appelant.
Toutes ces colonnes sont triables. Pour les colonnes Type et Nom du module, vous pouvez trier les éléments par ordre alphabétique dans l’ordre croissant ou décroissant. Pour Allocations, Octets et Taille moyenne (octets), vous pouvez trier les éléments en augmentant ou en diminuant la valeur numérique.
Symboles
Les symboles suivants s’affichent sous les onglets Allocation, Arborescence des appels et Fonctions :
- Type de valeur comme un entier
- Une collection de type valeur, telle qu'un tableau d'entiers
- Type de référence tel que la chaîne
-Collection de type référence comme tableau de chaînes de caractères
Arborescence des appels
La vue Arborescence des appels affiche les chemins d’exécution de fonction qui contiennent des objets qui allouent beaucoup de mémoire.
Les informations suivantes s’affichent dans l’affichage Arborescence des appels :
- La colonne nom de fonction affiche le processus ou le nom de la fonction contenant des objets qui allouent de la mémoire. L’affichage est basé sur le niveau du nœud que vous inspectez.
- Les colonnes Total (allocations) et Taille totale (octets) indiquent le nombre d’objets alloués et la quantité de mémoire utilisée par une fonction et toutes les autres fonctions qu’il appelle. La colonne Taille totale (octets) est masquée par défaut.
- Les colonnes Individuel (Allocations) et Taille individuelle (octets) indiquent le nombre d’objets alloués et la quantité de mémoire utilisée par une fonction ou un type d’allocation unique sélectionné.
- La colonne Taille moyenne (octets) affiche les mêmes informations que dans la vue Allocations. Cette colonne est masquée par défaut.
- La colonne Nom du module affiche le module qui contient la fonction ou le processus appelant.
Les options supplémentaires qui s’affichent dans l’arborescence des appels sont les suivantes :
- Le bouton Développer le chemin chaud met en évidence un chemin d’exécution de fonction qui contient de nombreux objets qui allouent de la mémoire. L’algorithme commence à un nœud que vous sélectionnez et met en évidence le chemin des allocations les plus courantes, en vous guidant dans votre investigation.
- Le bouton Afficher le chemin d’accès chaud affiche ou masque les symboles de flamme qui indiquent quels nœuds font partie du chemin d’accès chaud.
Fonctions
La vue Functions affiche les processus, les modules et les fonctions qui allouent de la mémoire.
Les informations qui s’affichent dans la vue Functions incluent :
La colonne Name affiche les processus en tant que nœuds de niveau supérieur. Les processus sous-jacents sont des modules, et sous les modules sont des fonctions.
Les colonnes suivantes, qui affichent les mêmes informations que dans les affichages Allocation et Arborescence des appels :
- Total (allocations)
- Individuel (allocations)
- taille totale (octets)
- Taille propre (octets)
- taille moyenne (octets)
Collection
La vue Collecte indique le nombre d’objets collectés ou conservés pendant le nettoyage de la mémoire.
Les informations suivantes s'affichent dans l’affichage Collection.
- La colonne GC affiche l’ID de ce garbage collection dans le cycle de vie de l’exécutable.
- La colonne Génération affiche la génération du garbage collection.
- La colonne Type de GC affiche le type de ce garbage collection.
- La colonne Motif lié à GC indique le motif de cet événement de garbage collection.
- La colonne Durée de l’interruption indique la durée pendant laquelle l’exécution a été bloquée, car le récupérateur de mémoire doit utiliser exclusivement le tas. Pour un garbage collection d’arrière-plan, cette valeur est petite.
- La colonne Taille de LOH affiche la taille du tas d’objets volumineux après l’exécution du récupérateur de mémoire.
- La colonne Taille de POH affiche la taille du tas d’objets épinglés après l’exécution du récupérateur de mémoire.
- La colonne Surv finalizable (Mo) indique le nombre de Mo d’objets qui ont des finaliseurs (destructeurs) qui ont survécu au garbage collection.
- La colonne Objets épinglés indique le nombre d’objets épinglés promus lors de cette collecte de déchets.
- La colonne Collectée affiche le nombre d’objets collectés par le collecteur de déchets.
- La colonne Survécus indique le nombre d’objets qui ont survécu après l’exécution du récupérateur de mémoire.
Lorsque vous sélectionnez une ligne, cette vue affiche également des graphiques en secteurs pour visualiser les objets collectés et survécus par type.
Outils de filtrage
Les vues Allocations, Arborescence des appels et Fonctions contiennent toutes les options Afficher Uniquement mon code et Afficher le code natif, ainsi qu’une zone de filtre.
- Afficher uniquement mon code réduit les systèmes, les frameworks et d’autres codes non-utilisateur dans [Code externe] frames afin que vous puissiez vous concentrer uniquement sur votre code. Pour plus d’informations, consultez Déboguer le code utilisateur avec Uniquement mon code.
- Afficher le code natif affiche du code natif dans la cible d’analyse et peut inclure du code non-utilisateur.
- Avec la zone de filtre, vous pouvez filtrer la colonne Nom ou Fonction en fonction de la valeur que vous fournissez. Entrez une valeur de chaîne dans la case. La table affiche ensuite uniquement les types qui contiennent cette chaîne.