Une vidage du tas GC de mon processus géré a révélé qu'il y avait beaucoup, entre autres types, de grands objets string.Comment puis-je suivre une chaîne jusqu'à la ligne de code, le nom de méthode, le nom de classe et l'assembly dans lequel elle a été créée?
Je mis le doigt sur deux d'entre eux.
> dumpheap -type System.String
> !do <address>
Cela me dit ce que le contenu de la chaîne sont, entre autres choses que je n'étais pas très intéressé par
Alors, je suivi la chaîne jusqu'à sa racine GC. Mais d'abord, je voulais confirmer que c'était sur LOH.
> !gcwhere <address>
> !gcroot <address>
Maintenant, c'est à peu près aussi loin que je pouvais. Je voudrais savoir où (quelle ligne de code l'a créé, de préférence, dumpil de cette ligne) avec la description de la méthode qui l'a créée, le type de déclaration de cette méthode, l'assemblage et l'application domaine dans lequel l'assembly a été chargé
Thsnk vous. J'ai une licence dotMemory. Je vais utiliser ça. –
dotMemory est capable de collecter des allocations d'objets dès le début, vous devez cocher la case "Collecter l'allocation immédiatement" lors du démarrage de votre application sous profileur. https://www.jetbrains.com/help/dotmemory/2017.1/Configuring_Profiling_Process.html –
Oui, j'ai vu ça. J'utilise actuellement la version d'évaluation en attendant ma clé de licence. La version d'évaluation a la case à cocher ** Check allocation immédiatement ** désactivée et n'a pas le bouton ** Collect Allocations ** que Thomas mentionne dans sa réponse. –