Question

J'ai créé un cliché utilisant beaucoup de mémoire et en utilisant! dumpheap -stat et! dumpheap -mt, j'ai reçu l'adresse de deux listes génériques de chaînes volumineuses de 30 Mo chacune.

Je veux en savoir plus sur ces listes. Ce qu’ils contiennent ou quel morceau de code les utilise.

Y a-t-il un moyen de les découvrir?

0: 000 > ! do 2b370038 Nom: System.Object [] MethodTable: 71e240bc Classe CEE: 71c0da54 Taille: 33554448 (0x2000010) octets Matrice: rang 1, nombre d'éléments 8388608, type CLASS Type d'élément: System.Collections.Generic.List`1 [[System.String, mscorlib]] Des champs: Aucun

Était-ce utile?

La solution

Pour obtenir des informations sur les instances de tableau, vous pouvez utiliser la commande ! dumparray avec l'indicateur -details . Soyez averti cependant que le vidage d'un tableau entier peut prendre un certain temps et générer beaucoup de texte.

Pour savoir ce qui maintient les instances en vie, utilisez la commande ! gcroot . Vous pouvez également consulter la commande ! Refs de sosex.dll.

sosex.dll a également une commande ! gcgen , qui peut vous indiquer la génération des instances. IIRC, une commande correspondante a été ajoutée à la version CLR 4.0 de sos.dll.

Autres conseils

Je vous recommande d'essayer .Net Memory Profiler ( http://memprofiler.com ) pour explorer les vidages de mémoire gérée. . C'est tellement plus facile que windbg. Une interface graphique agréable que vous pouvez utiliser pour rechercher et explorer des graphiques de références. Vous pouvez également voir les valeurs des champs d'instances.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top