Analyser l’utilisation de la mémoire à l’aide de l’outil Allocation d’objets .NET

Vous pouvez voir la quantité de mémoire utilisée par votre application et les chemins de code qui allouent le plus de mémoire à l’aide de l’outil 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 un tutoriel montrant comment améliorer les performances à l'aide de l'outil d'allocation d'objets .NET, consultez l'étude de cas : Guide du débutant pour l'optimisation du code.

Programme d’installation

  1. Sélectionnez Alt+F2 pour ouvrir le Profileur de performances dans Visual Studio.

  2. Cochez la case Suivi d’allocation d’objets .NET.

    Capture d’écran de l’outil de suivi d’allocation d’objets Dotnet sélectionné.

    Capture d’écran de l’outil de suivi d’allocation d’objets Dotnet sélectionné.

  3. 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 sont pas collectées tant que vous ne sélectionnez pas le bouton Enregistrer dans la vue de session de diagnostic.

  4. Une fois que l’exécution de l’outil a démarré, 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.

    Capture d’écran de la fenêtre montrant Arrêter la collecte.

    Capture d’écran de la fenêtre montrant Arrêter la collecte.

  5. Sélectionnez l’onglet Allocation. Des données d’allocation de mémoire similaires à ce qui suit s’affichent.

    Capture d’écran de l’onglet Allocation.

    Capture d’écran de l’onglet Allocation.

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 en regard de l’outil de suivi dans la page de synthèse du profileur.

Capture d’écran des paramètres de l’outil d’allocation Dotnet.

Capture d’écran des paramètres de l’outil d’allocation Dotnet.

Ajustez le taux d’échantillonnage à la valeur souhaitée. Ce changement permet d’accélérer les performances de votre application pendant la collecte et l’analyse.

Capture d’écran d’un taux d’échantillonnage ajusté.

Capture d’écran d’un taux d’échantillonnage ajusté.

Pour plus d’informations sur la manière de rendre l’outil plus efficace, consultez Optimisation des paramètres du Profileur.

Comprendre vos données

Dans la vue graphique suivante, le graphe du haut montre le nombre d’objets actifs dans votre application. Le graphe Delta d’objets du bas montre le changement en pourcentage des objets d’application. Les barres rouges indiquent le moment où le nettoyage de la mémoire a eu lieu.

Capture d’écran du graphe pour l’outil d’allocation Dotnet.

Capture d’écran du graphe pour l’outil d’allocation Dotnet.

Vous pouvez filtrer les données tabulaires afin d’afficher l’activité uniquement pour un intervalle de temps spécifié uniquement en sélectionnant un intervalle de temps. Dans ce cas, les informations qui s’affichent dans les onglets sont limitées à l’intervalle de temps filtré.

Capture d’écran du graphe filtré du moment d’allocation Dotnet.

Capture d’écran du graphe filtré du moment d’allocation Dotnet.

Vous pouvez également faire un zoom avant ou arrière sur le graphe.

Allocation

La vue Allocation affiche l’emplacement des objets qui allouent de la mémoire et la quantité de mémoire allouée par ces objets.

Capture d’écran de la vue Allocation développée.

Capture d’écran de la vue Allocation développée.

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 trace d’appels dans le passé en tant qu’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 Allocations indique le nombre d’objets qui occupent de la mémoire au sein d’une fonction ou d’un type 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 peuvent être triées. 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 :

  • Symbole de type valeur - Type valeur comme entier

  • Symbole de collection de type valeur - Collection de type valeur comme un tableau d’entiers

  • Symbole de type de référence - Type de référence comme chaîne

  • Symbole de collection de type de référence - Collection de type de référence comme un tableau d’entiers

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.

Capture d’écran de l’affichage Arborescence des appels.

Capture d’écran de l’affichage Arborescence des appels.

Les informations suivantes s’affichent dans l’affichage Arborescence des appels :

  • La colonne Nom de la 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’elle 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’affichage Arborescence des appels incluent :

  • 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 de la plupart des allocations, vous guidant dans votre investigation.
  • Le bouton Afficher le chemin chaud affiche ou masque les symboles de flamme qui indiquent quels nœuds font partie du chemin chaud.

Capture d’écran du chemin réactif développé.

Capture d’écran du chemin réactif développé.

Fonctions

La vue Fonctions affiche les processus, les modules et les fonctions qui allouent de la mémoire.

Capture d’écran de l’affichage Fonctions.

Capture d’écran de l’affichage Fonctions.

Les informations qui s’affichent dans l’affichage Fonctions incluent :

  • La colonne Nom affiche les processus en tant que nœuds de niveau supérieur. Sous les processus se trouvent des modules, et sous les modules se trouvent 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 individuelle (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.

Capture d’écran de l’affichage Collection.

Capture d’écran de l’affichage Collection.

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 par ce garbage collection.
  • La colonne Collectés indique le nombre d’objets collectés par le récupérateur de mémoire.
  • 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 survivants par type.

Capture d’écran des graphiques à secteurs dans l’affichage Collection.

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, frameworks et autres codes non utilisateur en trames [Code externe] 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 le code natif au sein de la cible d’analyse, et peut inclure du code non utilisateur.
  • Avec la zone de filtre, vous pouvez filtrer la colonne Nom ou Nom de la fonction d’après la valeur que vous fournissez. Entrez une valeur de chaîne dans la zone. Le tableau affiche ensuite uniquement les types qui contiennent cette chaîne.