Passer au contenu principal
Les Timing Captures de PIX comprennent des options permettant d’enregistrer des informations sur les allocations, les accès et les libérations de mémoire qui se produisent pendant la capture. Ces données mémoire servent à :
  • Calculer un ensemble de compteurs liés à la mémoire qui peuvent être représentés graphiquement dans la vue Metrics.
  • Construire une arborescence des piles d’allocation dans la vue Range Details.
  • Afficher un graphique de la mémoire du titre utilisée dans la vue Timeline.
  • Afficher la liste de toutes les allocations de mémoire par type de données.
  • Construire une carte de toute la mémoire allouée et consultée. La carte mémoire ainsi que les filtres de données et les fonctionnalités d’analyse associés sont affichés dans la disposition Memory.
La combinaison des compteurs mémoire, de l’arborescence des allocations, de la ligne Title Memory Used, des accès mémoire et de la liste des allocations par type peut vous aider à analyser l’utilisation de la mémoire par votre titre et à détecter les fuites de mémoire. Voici quelques modèles d’utilisation typiques :
  • Examinez les compteurs de la vue Metrics pour trouver les périodes pendant lesquelles un événement inattendu se produit, puis utilisez le menu contextuel de la vue Metrics pour accéder à cette période dans la vue Timeline et afficher l’arborescence des piles d’allocation.
  • Sélectionnez des points dans la ligne Title Memory Used et comparez la répartition de la mémoire du titre à ces moments avec la répartition au début de la capture pour comprendre l’évolution de l’utilisation de la mémoire du titre au fil du temps.
  • Examinez la quantité de remplissage dans diverses structures de données, à la recherche d’occasions de supprimer le remplissage inutile et de réduire ainsi la taille du type.
  • Utilisez la disposition Memory pour trouver la mémoire allouée mais jamais consultée. Repérer de telles allocations peut aider à réduire l’empreinte mémoire globale.
Les Timing Captures comprennent également une option permettant de collecter les événements d’erreur de page. Ces événements peuvent vous aider à voir, par exemple, quand une partie d’un fichier mappé en mémoire a été paginée sur le disque.

Collecter des données d’allocation de mémoire et d’erreurs de page

Le volet des options de Timing Capture contient des cases à cocher qui vous permettent de choisir de collecter ou non des données mémoire pour les appels à VirtualAlloc, HeapAlloc, XMemAlloc et à tout allocateur personnalisé défini dans votre titre (figure 1). Les événements d’erreur de page peuvent également être collectés. Figure 1. Options de collecte des données d’allocation de mémoire. Capture d'écran des options de collecte des données d'allocation de mémoire dans les Timing Captures La collecte de données sur les appels à VirtualAlloc collecte également des données sur l’utilisation du pool du noyau. Pour afficher la ligne Title Memory Used dans la vue Timeline, vous devez cocher la case VirtualAlloc. Pour collecter des données d’allocation de mémoire, sélectionnez les allocateurs à suivre, puis démarrez la capture.

Collecter des échantillons d’accès mémoire

PIX identifie les accès mémoire à partir d’échantillons. Chaque fois qu’un échantillon du processeur est collecté, PIX enregistre également les valeurs des registres du système. Ces valeurs de registre, ainsi que les PDB et les exécutables du titre, permettent de trouver les instructions du processeur qui entraînent des accès mémoire. Comme les accès sont identifiés par échantillonnage, des captures plus longues avec des fréquences d’échantillonnage plus élevées donnent une image plus complète des modèles d’accès mémoire d’un titre que des captures plus courtes avec une fréquence d’échantillonnage plus faible.
Avant de collecter des échantillons d’accès mémoire, ajoutez les chemins des PDB et des exécutables du titre aux paramètres de chemin des symboles.
Choisissez une fréquence d’échantillonnage, puis cochez la case Sample Memory Accesses avant de démarrer une capture. Utilisez la disposition Memory pour analyser les échantillons. Capture d'écran de l'option de collecte des échantillons d'accès mémoire dans les Timing Captures

Compteurs mémoire dans la vue Metrics

Lorsqu’une ou plusieurs des options de collecte de mémoire sont activées, PIX recueille et calcule plusieurs compteurs liés à la mémoire et les ajoute à la vue Metrics. Trois ensembles de compteurs sont calculés.
  • Event Rate
  • Memory Usage
  • Unfreed allocations
Dans chaque ensemble, chaque allocateur dispose de son propre compteur. Vous trouverez les compteurs dans la section CPU Memory du panneau Selector de la vue Metrics (figure 2). Figure 2. Compteurs de mémoire du processeur calculés. Capture d'écran des compteurs de mémoire du processeur calculés dans le panneau Selector Les compteurs Event Rate indiquent le rythme des allocations de mémoire sur la durée de la capture pour chaque allocateur. Par exemple, la figure 3 montre quatre périodes pendant lesquelles l’allocateur CustomAlloc 100 effectue des rafales d’allocations de mémoire. Figure 3. Représentation d’un compteur de rythme d’événements. Capture d'écran de l'activité du compteur de rythme d'événements CustomAlloc 100 dans la vue Metrics Les compteurs Memory Usage indiquent la quantité de mémoire utilisée sur la durée de la capture pour chaque allocateur. Par exemple, la figure 4 montre une croissance régulière en escalier pour les allocations effectuées à l’aide de VirtualAlloc. Figure 4. Représentation d’un compteur d’utilisation de la mémoire. Capture d'écran de l'évolution de la valeur du compteur d'utilisation de la mémoire VirtualAlloc dans la vue Metrics Le compteur Unfreed Allocations affiche le nombre d’allocations non libérées dans la capture, en fonction du moment où chaque allocation s’est produite. Par exemple, la figure 5 montre plusieurs périodes pendant lesquelles des allocations ont été effectuées sans être libérées avant la fin de la capture. Figure 5. Représentation d’un compteur d’allocations non libérées. Capture d'écran de l'évolution des allocations non libérées dans la vue Metrics Après avoir utilisé la vue Metrics pour identifier une période potentiellement intéressante du point de vue de la mémoire, utilisez le menu contextuel pour accéder à cette période dans la vue Timeline. Dans la figure 6, une période pendant laquelle des allocations non libérées se sont produites est sélectionnée dans la vue Metrics, puis synchronisée avec la vue Timeline. Figure 6. Affichage de la même période dans les vues Metrics et Timeline pour faciliter l’analyse de la mémoire. Captures d'écran superposées montrant la même période dans la vue Metrics et dans la vue Timeline pour l'analyse de la mémoire Lorsque vous utilisez la vue Timeline, vous pouvez voir l’arborescence des allocations dans la vue Range Details. Dans la figure 6, Range Details indique une taille non libérée non nulle pour VirtualAlloc, comme prévu. Développez l’Allocation Stack Tree pour trouver les piles d’appels responsables de la mémoire non libérée. Outre les compteurs Event Rate, Memory Usage et Unfreed Allocations, la vue Metrics inclut également tous les compteurs liés à la mémoire disponibles dans System Monitor. Vous trouverez ces compteurs dans la section Title Memory du panneau Selector (figure 7). Figure 7. Compteurs mémoire de System Monitor dans la vue Metrics. Capture d'écran des compteurs mémoire de System Monitor dans le panneau Selector de la vue Metrics

Analyser les allocations de mémoire dans la vue Range Details

Lors de la collecte des données mémoire, PIX enregistre la pile d’appels de chaque allocation et de chaque libération de mémoire. PIX agrège ensuite les piles d’appels dans une arborescence globale des allocations. Pour afficher l’arborescence, sélectionnez une plage de temps dans la vue Timeline. Dans le menu déroulant Items to Show, sélectionnez Allocation Stack Tree (figure 8). L’arborescence des allocations affichée dans Range Details inclut toutes les allocations survenues dans la plage de temps sélectionnée. Figure 8. L’option Allocation Stack Tree dans la vue Range Details. Capture d'écran de l'emplacement de l'option Allocation Stack Tree dans le menu déroulant Items to Show de la vue Range Details Les piles affichées dans Range Details sont d’abord regroupées par allocateur : VirtualAlloc, Kernel Pool, HeapAlloc, XMemAlloc et Title Allocators. Ce regroupement sépare par exemple les allocations et libérations effectuées avec HeapAlloc de celles effectuées avec XMemAlloc. Utilisez le panneau Selector situé à gauche de la vue pour spécifier les allocateurs à afficher dans l’arborescence. Un regroupement de second niveau dans l’arborescence permet de catégoriser davantage la mémoire selon des critères propres à chaque type d’allocateur.
  • Les allocations VirtualAlloc sont regroupées par titre et par outils pour indiquer la partition dans laquelle l’allocation a été effectuée.
  • Les allocations Kernel Pool sont regroupées par balise de pool. Ces balises sont définies dans le fichier pooltag.txt, installé avec les composants de débogage du Windows 10 SDK. Après l’installation du SDK, vous trouverez pooltag.txt dans C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\triage sur votre PC de développement.
  • Les allocations HeapAlloc sont regroupées par handle de tas afin que vous puissiez analyser l’utilisation de la mémoire tas par tas.
  • Les allocations XMemAlloc sont regroupées par type de mémoire.
  • Les Title Allocators sont regroupés par Allocator ID, l’ID étant la valeur du paramètre allocatorID transmis à PIXRecordMemoryAllocationEvent.
La figure 9 montre l’organisation de l’arborescence des piles d’allocation. Figure 9. L’arborescence des piles d’allocation dans la vue Range Details. Capture d'écran de l'arborescence des piles d'allocation dans la vue Range Details, chaque groupe d'allocateurs de premier niveau étant développé pour afficher le second niveau La vue Range Details comprend les colonnes Unfreed Size, Allocated Size et Allocation Count. Une valeur non nulle dans la colonne Unfreed Size indique que des allocations ont été effectuées dans la plage de temps sélectionnée et n’avaient pas été libérées à la fin de la capture. Le développement de l’arborescence affiche les piles agrégées de toutes les allocations attribuées à cet allocateur pour la plage de temps sélectionnée. Les valeurs des colonnes Unfreed Size, Allocated Size et Allocation Count sont toujours relatives au nœud actuellement sélectionné dans l’arborescence. La figure 10 montre que la fonction LeakMemorySometimes a effectué 316 allocations de mémoire et que 3 481 272 320 octets de ces allocations n’avaient pas été libérés à la fin de la capture. Figure 10. Développement d’une partie de l’arborescence des piles d’allocation. Capture d'écran de l'arborescence des piles d'allocation, une partie du groupe VirtualAlloc étant développée sur six niveaux De plus, l’arborescence des piles indique que LeakMemorySometimes a été appelée dans le cadre de deux piles d’appels distinctes. La première passe par la fonction Process, la seconde par UpdateEnemyPositions. La colonne Unfreed Size de ces deux fonctions indique que toute la mémoire non libérée provient de la première pile d’appels, celle qui inclut Process. La sélection d’une fonction dans la vue Range Details renseigne la vue Element Details avec des informations supplémentaires sur la mémoire allouée et libérée par cette fonction. L’onglet Source Analysis affiche une liste du code source indiquant quelles lignes de la fonction ont alloué de la mémoire (figure 11). Figure 11. La vue Element Details pour une fonction sélectionnée. Capture d'écran de la vue Element Details pour une fonction sélectionnée Par défaut, PIX utilise les chemins des fichiers sources stockés dans les PDB de votre titre pour localiser le fichier source correspondant. Si ce fichier est introuvable, la vue d’analyse du code source contient le texte suivant : Could not find “filename”.cpp with a matching checksum Utilisez le contrôle Source Paths du panneau Display Options ou de la page Settings principale pour spécifier un ou plusieurs répertoires dans lesquels PIX doit rechercher les fichiers sources s’ils sont introuvables à l’emplacement par défaut. Le panneau Display Options permet également de personnaliser la vue source pour afficher des valeurs brutes plutôt que des pourcentages, et de choisir d’afficher les données sous forme d’Allocated Size, d’Allocation Counts ou d’Unfreed Size. Figure 12. Les options d’affichage du code source Capture d'écran des options d'affichage du code source La vue Range Details comprend une barre de filtre qui vous permet de limiter le contenu de la vue aux piles contenant une chaîne donnée. Outre la recherche de chaînes, la barre de filtre comprend également un bouton !Freed (figure 13) qui limite la vue aux piles d’appels dont la valeur Unfreed Size n’est pas nulle. Figure 13. Le bouton !Freed de la barre de filtre. Capture d'écran de l'emplacement du bouton !Freed dans la barre de filtre de l'arborescence des piles d'allocation de la vue Range Details Le volet Display Options, sur le côté droit de la vue, vous permet de personnaliser certains aspects de l’affichage de l’arborescence des piles d’allocation dans la vue Range Details. Vous pouvez sélectionner les colonnes à afficher et inverser l’arborescence afin que l’appelé apparaisse en haut de la pile plutôt qu’en bas. Figure 14. Options d’affichage de l’arborescence des piles d’allocation. Capture d'écran du volet Display Options de l'arborescence des piles d'allocation Vous pouvez également utiliser la vue Range Details pour consulter une liste plate de toutes les allocations effectuées à l’aide de VirtualAlloc. Dans le menu déroulant Items to Show, sélectionnez Virtual Memory Allocations pour afficher la liste des allocations (figure 15). Par défaut, la liste est triée par heure et comprend des colonnes telles que Size, Unfreed Size et Flags. Figure 15. Affichage des allocations de mémoire virtuelle. Capture d'écran d'une liste d'allocations de mémoire virtuelle dans la vue Range Details ; dans la liste, un appel à VirtualAlloc est sélectionné et ses détails sont affichés dans la vue Element Details

Afficher les erreurs de page dans la chronologie

Les événements d’erreur de page sont dessinés sous forme de traits verticaux jaunes dans les lignes des threads et des cœurs de la Timeline. La sélection d’un événement d’erreur de page renseigne la vue Element Details avec des informations supplémentaires sur l’événement, notamment le type d’erreur de page et la pile d’appels qui l’a provoqué (figure 16). Capture d'écran d'une erreur de page dans les lignes des threads et des cœurs Les événements d’erreur de page sont affichés dans la Timeline afin de pouvoir être corrélés avec les blocages qui se produisent dans le jeu. Les erreurs de page à la demande avec remise à zéro sont particulièrement coûteuses, car elles peuvent entraîner la remise à zéro d’une page avant son utilisation. Ce scénario se produit lorsque des pages de 4 Ko sont allouées à l’aide de XMemVirtualAlloc

Afficher les rapports d’utilisation de la mémoire à l’aide du graphique Title Memory Used

Si vous sélectionnez l’option de collecte des données sur les appels à VirtualAlloc avant de démarrer une capture, PIX crée une ligne nommée Title Memory Used qui contient un graphique de la quantité de mémoire du titre utilisée à différents points d’échantillonnage pendant la capture. Lors de sa création, la ligne Title Memory Used peut apparaître en bas de la capture. Vous pouvez utiliser le panneau Lane Configuration pour épingler la ligne ou la faire glisser vers le haut. L’axe des y de la ligne Title Memory Used va de zéro à la quantité de mémoire du titre disponible sur la console. Survolez n’importe quel point de la ligne pour afficher la quantité de mémoire du titre utilisée à ce moment. La figure 17 montre la ligne Title Memory Used avec une info-bulle indiquant qu’environ 1 minute après le début de la capture, 4,3 Go de mémoire du titre sont utilisés. Dans ce cas, la quantité de mémoire du titre utilisée augmente régulièrement jusqu’à se stabiliser au maximum vers la fin de la capture. Figure 17. La ligne Title Memory Used dans la vue Timeline. Capture d'écran de la ligne Title Memory Used dans la vue Timeline Sélectionnez un point unique du graphique pour renseigner la vue Element Details avec un tableau Memory Usage Comparison. Ce tableau fournit une répartition de la mémoire du titre au point sélectionné, ainsi qu’une comparaison de l’évolution de la quantité et de la répartition de la mémoire du titre depuis le début de la capture. Sélectionnez deux points du graphique pour afficher la différence de quantité de mémoire allouée entre ces points. Le tableau Memory Usage Comparison affiche la quantité de mémoire du titre utilisée dans quatre catégories.
  • Mémoire validée VirtualAlloc : la mémoire allouée par des appels à VirtualAlloc avant le début de la capture n’est pas incluse dans ce total.
  • Utilisation des images : cette catégorie représente la mémoire utilisée pour stocker les images binaires de votre titre.
  • Allocations de pages physiques : les allocations effectuées avant le début de la capture sont incluses dans ce total.
  • Autre : la catégorie Other comprend la mémoire du titre utilisée pour stocker les entrées de table de pages, les listes de descripteurs de mémoire et d’autres petites allocations. Les allocations effectuées avant le début de la capture sont incluses dans ce total.
Dans les prochaines versions, le tableau Memory Usage Comparison sera étendu pour fournir une répartition plus détaillée de la catégorie Other.
La figure 18 montre que la quantité de mémoire du titre utilisée a augmenté de 2,3 Go entre les deux points sélectionnés. Figure 18. Le tableau Memory Usage Comparison. Capture d'écran de deux points sélectionnés dans la vue Timeline et du tableau Memory Usage Comparison dans la vue Element Details, qui affiche des informations sur les deux points et les écarts de valeur Vous pouvez utiliser la ligne Title Memory Used, la vue Range Details et la vue Element Details pour étudier plus en détail les augmentations inattendues de l’utilisation de la mémoire du titre. Sélectionnez une plage de temps dans la ligne Title Memory Used pour renseigner la vue Range Details avec toutes les données de capture de cette plage. Dans la vue Range Details, sélectionnez Virtual Memory Allocations dans Items to Show pour renseigner le tableau des événements avec une liste plate de toutes les allocations et libérations de mémoire virtuelle. Sélectionnez Allocation Stack Tree dans Items to Show pour renseigner le tableau des événements avec une vue des piles d’appels de toutes les allocations effectuées pendant la plage de temps sélectionnée, y compris les allocations de mémoire virtuelle. Sélectionnez une allocation dans la vue Range Details pour renseigner Element Details avec des détails sur l’allocation, notamment sa pile d’appels. La figure 19 montre une allocation qui n’a pas été libérée, comme l’indique la colonne Unfreed Size de Range Details. Figure 19. Vue Element Details affichant une allocation non libérée. Capture d'écran d'une plage de temps sélectionnée dans la vue Timeline, d'une liste plate d'allocations de mémoire virtuelle dans la vue Range Details et d'informations sur une allocation non libérée dans la vue Element Details Vous pouvez configurer divers aspects de l’affichage de la ligne Title Memory Used à l’aide du panneau Lane Configuration. Dans le menu déroulant Options for, sélectionnez Memory Usage Lanes et personnalisez les paramètres d’affichage (figure 20). Figure 20. Configuration de la ligne Title Memory Used. Capture d'écran du panneau Lane Configuration ouvert sur la vue Timeline et affichant les options des Memory Usage Lanes

Analyser les allocations de mémoire par type de données

Outre l’enregistrement d’informations sur les fonctions et les piles d’appels qui ont alloué de la mémoire, PIX enregistre également des informations sur les types de données alloués. Affichez la liste des types alloués en sélectionnant Type Allocations dans la liste déroulante Items to show de la vue Range Details. La liste des allocations est partitionnée par allocateur ; les types alloués par des appels à VirtualAlloc sont donc séparés des types alloués par HeapAlloc ou par tout allocateur personnalisé utilisé par le titre. La liste des allocations par type de données permet de voir le nombre d’allocations et la quantité de mémoire allouée pour chaque type de données. De plus, la liste des types de données indique la quantité de remplissage présente dans chaque type, ainsi que la quantité totale de mémoire occupée par ce remplissage. Connaître la quantité de remplissage permet de trouver des occasions d’éliminer le remplissage inutile, réduisant ainsi la taille du type de données et la quantité de mémoire utilisée. Les colonnes suivantes sont fournies dans la vue Range Details pour chaque type de données :
  • Allocation Count. Le nombre de fois où le type a été alloué.
  • Size. La taille du type lui-même.
  • Total Size. La quantité totale de mémoire occupée par toutes les allocations du type. Cette quantité est égale à Size multipliée par Allocation Count.
  • Exc. Padding. La quantité de remplissage dans le type lui-même.
  • Total Exc. Padding. La quantité totale de mémoire occupée par le remplissage pour toutes les allocations du type. Cette quantité est égale à Exc. Padding multiplié par Allocation Count.
  • Name. Le nom du type.
  • Inc. Padding. La quantité de remplissage dans le type lui-même, plus le remplissage de tous les types imbriqués.
  • Total Inc. Padding. La quantité totale de mémoire occupée par le remplissage pour toutes les allocations du type, plus les allocations des types imbriqués. Cette quantité est égale à Inc. Padding multiplié par Allocation Count.
Figure 21. La liste des types de données dans la vue Range Details Capture d'écran des allocations de mémoire par type de données dans la vue Range Details Les tailles de mémoire sont affichées en octets par défaut. Utilisez la liste déroulante Size Units du panneau Display Options pour modifier les unités de taille. La sélection d’un type dans la vue Range Details renseigne la vue Element Details avec des informations sur la taille de chaque champ du type, remplissage compris. Les détails des types imbriqués peuvent être consultés en sélectionnant le + à côté du nom du type imbriqué. La figure 22 montre un type qui contient 3 champs de remplissage, pour un total de 14 octets. Figure 22. La vue Element Details d’un type de données Capture d'écran de la vue Element Details d'un type de données sélectionné

Analyser les accès mémoire à l’aide de la disposition Memory

La disposition Memory permet d’analyser les allocations, lectures et écritures de mémoire collectées lorsque la case Sample Memory Accesses est cochée avant le démarrage d’une Timing Capture. Les principaux éléments de l’interface utilisateur de la disposition Memory sont présentés dans la figure suivante et décrits dans la liste qui suit. Capture d'écran des fonctionnalités de la disposition Memory
  • Graphique Memory Usage. Un graphique de la quantité de mémoire CPU Title et de mémoire des objets d’API D3D utilisée sur la durée de la capture.
  • Contrôles de démarrage de l’analyse. Un ensemble de contrôles d’interface utilisateur permettant de démarrer l’analyse de la mémoire.
  • Indicateur de progression. Une barre de progression qui indique les étapes de l’analyse de la mémoire.
  • Carte mémoire. Une carte de toutes les allocations de mémoire effectuées pendant la plage de temps sélectionnée.
  • Filtres d’analyse. Les contrôles d’interface utilisateur permettant de filtrer la carte mémoire selon un ensemble de critères prédéfinis.
  • Contrôle de démarrage de l’animation. Un contrôle permettant de démarrer l’animation nécessaire pour afficher les accès mémoire individuels.
  • Panneau d’analyse. Le panneau d’analyse comporte deux onglets : Summary Analysis et Allocation Details. L’onglet Summary Analysis fournit un tableau croisé dynamique permettant d’analyser les données selon un ensemble de critères prédéfinis. La figure suivante montre un résumé des données croisé d’abord par Allocation Thread, puis par Designation.
Capture d'écran du tableau croisé dynamique Summary Analysis dans la disposition Memory Lorsqu’un bloc est sélectionné dans la carte mémoire, l’onglet Allocation Details est renseigné avec des détails sur l’allocation de mémoire sélectionnée, notamment son adresse, sa taille, la taille de page, l’allocateur et la pile d’appels. La liste des accès à la mémoire allouée, le cas échéant, est également fournie. Capture d'écran des Allocation Details dans la disposition Memory

Exécuter l’analyse de la mémoire

La carte mémoire n’est pas renseignée à l’ouverture initiale d’une capture. Pour la renseigner, sélectionnez une plage de temps dans le graphique Memory Usage, sélectionnez un type de mémoire dans la liste déroulante Memory Type et cliquez sur le bouton Analyze. Capture d'écran des contrôles permettant de démarrer l'analyse des accès mémoire La carte mémoire est organisée par adresse mémoire. Chaque case de la carte représente une allocation de mémoire à une adresse donnée. La taille de chaque case est proportionnelle à la taille de l’allocation. Les cases de la carte mémoire sont colorées selon la légende située à gauche de la carte. La figure suivante montre une carte mémoire colorée par type de mémoire : CPU, GPU et Tooling. La sélection d’une allocation renseigne l’onglet Allocation Details du panneau d’analyse avec des informations détaillées sur cette allocation, notamment son adresse, sa taille, la taille de page, l’allocateur et la pile d’appels. Capture d'écran de la carte mémoire dans la disposition Memory La sélection d’une autre valeur dans la liste déroulante Color modifie la légende et les couleurs des allocations dans la carte mémoire. Dans la figure suivante, la carte mémoire est colorée par balise XMem Capture d'écran de la carte mémoire avec un autre jeu de couleurs Les allocations affichées dans la carte mémoire peuvent être filtrées de diverses manières à l’aide des listes déroulantes Lifetime, Designation, Allocation Size, Access Sample Count et Alloc Page Size. Par exemple, la liste déroulante Lifetime permet de filtrer les allocations effectuées pendant la période sélectionnée mais non libérées à la fin de la fenêtre d’analyse. Ces allocations représentent des fuites de mémoire potentielles. L’utilisation du filtre Access Sample Count pour n’afficher que les allocations jamais consultées peut aider à trouver la mémoire allouée mais jamais utilisée.

Analyser les échantillons d’accès mémoire

Des informations détaillées sur chaque accès mémoire, notamment un lien vers la chronologie au moment où l’accès s’est produit ainsi que sa pile d’appels, peuvent être obtenues en exécutant une animation de la mémoire sur la plage de temps sélectionnée. Utilisez le bouton Memory Animation pour exécuter l’animation. Pendant l’animation, PIX traite chaque accès mémoire dans l’ordre chronologique et met les accès en surbrillance dans la carte. Les lectures de mémoire sont mises en surbrillance d’une couleur et les écritures d’une autre. La figure suivante montre la carte mémoire pendant l’exécution d’une animation. Capture d'écran de l'animation de la carte mémoire À mesure que les accès mémoire sont analysés, des liens hypertexte et des piles d’appels pour chaque allocation et chaque accès sont ajoutés dans le panneau situé à droite de la carte. Cliquer sur un lien hypertexte permet d’accéder à l’échantillon du processeur, dans la chronologie, qui a entraîné l’accès mémoire. Capture d'écran des liens hypertexte vers la chronologie pour chaque accès mémoire

Le tableau croisé dynamique Summary Analysis

L’onglet Summary Analysis contient un tableau croisé dynamique permettant d’analyser la quantité totale de mémoire allouée dans la plage de temps sélectionnée. La quantité de mémoire allouée peut être croisée selon divers critères, notamment la balise XMem, le thread d’allocation, ainsi que les arborescences de piles d’appels et d’événements PIX. Dans la figure suivante, la quantité totale de mémoire allouée est croisée d’abord par thread, puis par les piles d’appels qui ont alloué la mémoire. Capture d'écran du tableau croisé dynamique de l'onglet Summary Analysis Une option permet de condenser les cadres de pile lorsque le tableau récapitulatif est croisé par Allocation Stack Tree ou Allocation PIX Event Stack. Si un nœud d’une arborescence de piles n’a qu’un seul enfant, ce nœud enfant est supprimé lors de la condensation et remplacé par un indicateur visuel. La condensation des arborescences de piles accélère la navigation dans les parties de l’arborescence qui n’ont qu’un seul enfant. L’espace horizontal est également optimisé lorsque les arborescences de piles sont condensées. Pour condenser une pile, sélectionnez l’option Condense Frames à partir de l’icône des paramètres de la vue. Capture d'écran de l'option de condensation des cadres de pile dans l'onglet Summary Analysis

Voir aussi

PIX Allocateurs de mémoire personnalisés dans PIX Configuration de la mémoire pour votre titre et votre kit de développement
Dernière modification le 8 octobre 2026