> ## Documentation Index
> Fetch the complete documentation index at: https://devdocs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Analyser l'utilisation et les performances de la mémoire dans les Timing Captures

> Analyser l'utilisation et les performances de la mémoire dans les Timing Captures

Les [Timing Captures de PIX](/fr/tools/tools-console/pix/new-timing-captures) 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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-options.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=18ca947a886770d66e2c04f95469e8dd" alt="Capture d'écran des options de collecte des données d'allocation de mémoire dans les Timing Captures" width="444" height="610" data-path="images/gdk/tools/pix-timing-capture-memory-options.png" />

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.

<Note>
  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](/fr/tools/tools-console/pix/pix-cpu-pdb-config).
</Note>

Choisissez une fréquence d'échantillonnage, puis cochez la case **Sample Memory Accesses** avant de démarrer une capture. Utilisez la [disposition Memory](#memory_layout) pour analyser les échantillons.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-access-sample-options.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=262e2bed7a74266a883f3e36409750b5" alt="Capture d'écran de l'option de collecte des échantillons d'accès mémoire dans les Timing Captures" width="419" height="449" data-path="images/gdk/tools/pix-timing-capture-access-sample-options.png" />

<a id="range_details_metrics_view" />

## 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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-computed_counters.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=5e5525451e2d08bef2710e2f8365ee13" alt="Capture d'écran des compteurs de mémoire du processeur calculés dans le panneau Selector" width="242" height="392" data-path="images/gdk/tools/pix-timing-capture-memory-computed_counters.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-event-rate.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=745cd873ddd35cb98c41133d238bd924" alt="Capture d'écran de l'activité du compteur de rythme d'événements CustomAlloc 100 dans la vue Metrics" width="684" height="519" data-path="images/gdk/tools/pix-timing-capture-memory-event-rate.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-usage.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=dad38ec4ec0240db37a81190ae2c6f04" alt="Capture d'écran de l'évolution de la valeur du compteur d'utilisation de la mémoire VirtualAlloc dans la vue Metrics" width="990" height="497" data-path="images/gdk/tools/pix-timing-capture-memory-usage.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-unfreed_allocations.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=ea86e6ef8ae3ec90b1c27b41f118c262" alt="Capture d'écran de l'évolution des allocations non libérées dans la vue Metrics" width="897" height="700" data-path="images/gdk/tools/pix-timing-capture-unfreed_allocations.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-metrics-timeline.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=e41812dd85d5cac6765203665ed9a940" alt="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" width="1443" height="658" data-path="images/gdk/tools/pix-timing-capture-memory-metrics-timeline.png" />

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](#range_details_memory) 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](/fr/tools/tools-console/pix/pix-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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-metrics-sysmon-counters.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=f737326e8c17a56ac24d23eddae37669" alt="Capture d'écran des compteurs mémoire de System Monitor dans le panneau Selector de la vue Metrics" width="262" height="592" data-path="images/gdk/tools/pix-timing-capture-memory-metrics-sysmon-counters.png" />

<a id="range_details_memory" />

## 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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-items-to-show.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=7b8c1f5ee00ffd1a72109ef74f922865" alt="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" width="631" height="446" data-path="images/gdk/tools/pix-timing-capture-memory-items-to-show.png" />

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](https://aka.ms/windowssdk). 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](/fr/reference/tools/pix3/functions/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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-range-details.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=dc9e8aae510c1cf42bea6aa86ddbed60" alt="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" width="1014" height="559" data-path="images/gdk/tools/pix-timing-capture-memory-range-details.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-allocation-tree.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=0d69c5c77d7372b8ee2c11c1ec6204cc" alt="Capture d'écran de l'arborescence des piles d'allocation, une partie du groupe VirtualAlloc étant développée sur six niveaux" width="902" height="379" data-path="images/gdk/tools/pix-timing-capture-memory-allocation-tree.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-source-analysis.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=e0dfbe86efa7a7ed532ac6ecc0707574" alt="Capture d'écran de la vue Element Details pour une fonction sélectionnée" width="1089" height="331" data-path="images/gdk/tools/pix-timing-capture-memory-source-analysis.png" />

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**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-source-analysis-display-options.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=696336835b526f5ffb348f71b79cde0d" alt="Capture d'écran des options d'affichage du code source" width="830" height="359" data-path="images/gdk/tools/pix-timing-capture-memory-source-analysis-display-options.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-filter-bar.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=4e394a435ced2c1728d8c2e586a4649a" alt="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" width="902" height="242" data-path="images/gdk/tools/pix-timing-capture-memory-filter-bar.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-display-options.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=1193c1ab298414ed2f163b0d69ebdf2c" alt="Capture d'écran du volet Display Options de l'arborescence des piles d'allocation" width="564" height="289" data-path="images/gdk/tools/pix-timing-capture-memory-display-options.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-flat-list.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=cd571a8fa1734bbb15daf1163920b115" alt="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" width="1546" height="524" data-path="images/gdk/tools/pix-timing-capture-memory-flat-list.png" />

## 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).

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-page-fault.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=fc6af5717fabecbd54ceb8fa624f9e99" alt="Capture d'écran d'une erreur de page dans les lignes des threads et des cœurs" width="874" height="704" data-path="images/gdk/tools/pix-timing-capture-memory-page-fault.png" />

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](/fr/reference/system/xmem/functions/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](/fr/tools/tools-console/pix/new-timing-captures#lane_config) 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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-title-memory-used-lane.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=ed35fb949711d20308610255e073e1f2" alt="Capture d'écran de la ligne Title Memory Used dans la vue Timeline" width="1203" height="364" data-path="images/gdk/tools/pix-timing-capture-memory-title-memory-used-lane.png" />

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.

<Note>
  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.
</Note>

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-memory-report.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=2a94b6c6b249be1ff0fc63df54916017" alt="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" width="896" height="673" data-path="images/gdk/tools/pix-timing-capture-memory-memory-report.png" />

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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-timeline_range.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=4a1e10b97f50978f128656d1b2525a54" alt="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" width="1245" height="707" data-path="images/gdk/tools/pix-timing-capture-memory-timeline_range.png" />

Vous pouvez configurer divers aspects de l'affichage de la ligne Title Memory Used à l'aide du [panneau Lane Configuration](/fr/tools/tools-console/pix/new-timing-captures#lane_config). 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.**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-title-memory-lane-config.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=f466bf505dc7a94a91621e034df5602f" alt="Capture d'écran du panneau Lane Configuration ouvert sur la vue Timeline et affichant les options des Memory Usage Lanes" width="911" height="441" data-path="images/gdk/tools/pix-timing-capture-memory-title-memory-lane-config.png" />

## 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**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-type_allocations_list.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=60b01144ad42d90a8a8b8a2f659e79bc" alt="Capture d'écran des allocations de mémoire par type de données dans la vue Range Details" width="1356" height="442" data-path="images/gdk/tools/pix-timing-capture-memory-type_allocations_list.png" />

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**

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-type_element_details.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=a3c3ae60cd09d0b56744731849cc80b8" alt="Capture d'écran de la vue Element Details d'un type de données sélectionné" width="561" height="334" data-path="images/gdk/tools/pix-timing-capture-memory-type_element_details.png" />

<a id="memory_layout" />

## 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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-overview.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=2c21c25494f17fe25a398272da5dd4ee" alt="Capture d'écran des fonctionnalités de la disposition Memory" width="1467" height="772" data-path="images/gdk/tools/pix-timing-capture-memory-layout-overview.png" />

* **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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-pivot-table.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=bb0ff7d560f93e0c0341ba7369d21b96" alt="Capture d'écran du tableau croisé dynamique Summary Analysis dans la disposition Memory" width="548" height="345" data-path="images/gdk/tools/pix-timing-capture-memory-layout-pivot-table.png" />

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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-allocation-details.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=3df4d1bbac7c90b3a348230c9aceb056" alt="Capture d'écran des Allocation Details dans la disposition Memory" width="651" height="632" data-path="images/gdk/tools/pix-timing-capture-memory-layout-allocation-details.png" />

### 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**.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-analysis-buttons.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=6c108de4eadae2e946a2d3f3f0c66576" alt="Capture d'écran des contrôles permettant de démarrer l'analyse des accès mémoire" width="650" height="470" data-path="images/gdk/tools/pix-timing-capture-memory-layout-analysis-buttons.png" />

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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-map.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=ccdfe5d146dc12f1ed5f80423d288dee" alt="Capture d'écran de la carte mémoire dans la disposition Memory" width="1357" height="679" data-path="images/gdk/tools/pix-timing-capture-memory-layout-map.png" />

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

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-map-colors.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=4dc3622a3a70e08aa45d95fc9b9ef0c2" alt="Capture d'écran de la carte mémoire avec un autre jeu de couleurs" width="664" height="441" data-path="images/gdk/tools/pix-timing-capture-memory-layout-map-colors.png" />

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](/fr/tools/tools-console/pix/new-timing-captures) 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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-map-animation.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=f48bd3a937ea713d579146bb8e3ddba9" alt="Capture d'écran de l'animation de la carte mémoire" width="950" height="598" data-path="images/gdk/tools/pix-timing-capture-memory-layout-map-animation.png" />

À 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](/fr/tools/tools-console/pix/new-timing-captures), qui a entraîné l'accès mémoire.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-map-access-links.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=2136ace5bff619bec02e4ae5851b601b" alt="Capture d'écran des liens hypertexte vers la chronologie pour chaque accès mémoire" width="582" height="653" data-path="images/gdk/tools/pix-timing-capture-memory-layout-map-access-links.png" />

### 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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-summary-analysis-pivot-table.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=ee9118be167f2288f66b5c7e119faba2" alt="Capture d'écran du tableau croisé dynamique de l'onglet Summary Analysis" width="540" height="750" data-path="images/gdk/tools/pix-timing-capture-memory-layout-summary-analysis-pivot-table.png" />

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.

<img src="https://mintcdn.com/microsoft-4404708b/stYRJgFi22xot4tO/images/gdk/tools/pix-timing-capture-memory-layout-summary-analysis-pivot-table-condensed-frames.png?fit=max&auto=format&n=stYRJgFi22xot4tO&q=85&s=abeb6238751d5554dc37bf78f1ee85a6" alt="Capture d'écran de l'option de condensation des cadres de pile dans l'onglet Summary Analysis" width="711" height="511" data-path="images/gdk/tools/pix-timing-capture-memory-layout-summary-analysis-pivot-table-condensed-frames.png" />

## Voir aussi

[PIX](/fr/tools/tools-console/pix/pix) [Allocateurs de mémoire personnalisés dans PIX](/fr/tools/tools-console/pix/pix-custom-memory-allocators) [Configuration de la mémoire pour votre titre et votre kit de développement](/fr/build/console-features/memory/system-memory-tooling)


## Related topics

- [PIX sur XBOX et Windows pour les titres GDK](/fr/tools/tools-console/pix/index.md)
- [Répertoire des rubriques NDA : liens actifs vers Microsoft Learn](/fr/nda/nda-topic-directory.md)
- [Capture GPU et analyse des performances avec PIX](/fr/tools/tools-console/pix/gpu/index.md)
- [Vidéos sur PIX](/fr/tools/tools-console/pix/pix-videos.md)
- [Mémoire et performances de Social Manager](/fr/services/xbox-services/community/social-manager/concepts/live-socmgr-mem-perf.md)
