2010-01-04 4 views
2

J'ai quelques millions d'objets qui traînent en mémoire. Je veux trouver les gcroots pour eux donc j'ai besoin d'une adresse d'objet. ! DumpHeap saute cependant tous les objets qui prennent plus de temps que j'ai eu la patience d'attendre. Comment puis-je limiter sa sortie à une seule adresse d'objet? J'utilise Visual Studio 2008 btw.Comment vider uniquement l'adresse du premier objet avec! DumpHeap (.load sos)

Répondre

3

Jason Evans a raison. Ma version ne possède pas l'option -l, alors voici la solution que j'utilise: J'utilise le paramètre final pour limiter la sortie à une plage d'adresses comme ceci:

!dumpheap -mt 0794f29c 0 04000000 

La dernière adresse est l'adresse la plus élevée je permets . En augmentant l'adresse en petites étapes, j'ai finalement frappé les premiers objets.

1

Découvrez this page. Il semble que vous pouvez utiliser

-l X 

pour limiter le nombre d'éléments affichés.

+0

Cette option semble être inconnu à Visual Studio. Peut-être que je dois utiliser WinDbg. – usr

+0

Je n'ai pas pu confirmer cela, mais il est possible que la version de SOS.dll que vous utilisez n'ait pas cette option. Il existe actuellement deux versions de SOS.dll flottant - pour .NET Framework 1.1 et 2.0. Ma conjecture est que la version 1.1 a l'option -l et peut-être la version 2.0 ne l'a pas. Si tel est le cas, alors vous pourriez utiliser la version 2.0, donc ma suggestion n'est pas viable pour vous. Gutted :( –

0

Le meilleur point de départ est l'argument -stat. Cela va vider un résumé de la table d'objet en direct par opposition à chaque objet dans le système. Il vous donnera une bonne idée sur ce que les objets en particulier sont à l'origine les plus frais généraux

!dumpheap -stat 

Je voudrais aussi Recomend jeter un oeil sur les articles de blog suivants, car ils sont destinés à aider les gens à utiliser WinDbg pour traquer ce genre du problème

+1

Merci, je sais déjà quel type d'objet est à l'origine parce que j'ai déjà fait cela.Je dois maintenant savoir où ces objets sont référencés – usr

2
!dumpheap -type System.String -short 

Est-ce que vider l'adresse des objets

+0

Merci Cela ne semble pas limiter la taille de sortie en termes de nombres de lignes Avec un million d'objets, cela prend encore trop de temps. – usr

Questions connexes