CLR Profiler en place de processus existant
Question
Je voudrais utiliser quelque chose comme CLR Profils .Net 2.0 pour voir ce que les objets prennent plus d'espace dans le tas à un moment donné (d'un ASP.Net processus de travail).
Cependant, le CLR Profiler uniquement me permet de DÉMARRER une application, s'attache pas à un existant.Je suppose que c'est parce qu'il suit les allocations et GC trop, mais je ne suis pas très intéressé par ce que.Je voudrais juste quelque chose qui prend un instantané de l'état actuel de la tas, et me montre ce qui est là et combien d'objets de chaque type il y a, et du nombre total d'octets sont utilisés par chaque type d'objet.
Des idées?
La solution
.Net Memory Profiler est exactement ce dont vous avez besoin.Ce n'est pas gratuit mais il y a une version d'essai.En fait j'ai utilisé le procès pour trouver les fuites sur notre dernier projet.Une caractéristique remarquable est:
Facilement identifier les fuites de mémoire par la collecte et la comparaison des instantanés de .NET mémoire
Je pense que c'est ce que vous cherchez.
Autres conseils
- Attacher un débogueur
cdb-p
- de la charge .net extensions de débogueur
.loadby sos mscorwks
- dump le tas dans un format que l'CLRProfiler comprend
!TraverseHeap heap.txt
- détacher débogueur
qd
- charge heap.txt dans le clrprofiler app
Cet article à partir de MSDN les pourparlers sur la façon d'utiliser le libre CLR Profiler à comparer aux instances de la pile.Vous avez raison, vous ne pouvez actuellement pas joindre CLR Profiler à l'exécution d'un processus (l'article explique pourquoi), mais, pour ce que ça vaut, il semble que vous serez en mesure de rapidement.
Avez-vous regardé RedGates .NET Profiler?
Son été un moment depuis que je l'ai utilisé, mais je suis faily sûr que vous pouvez joindre à tout CLR processus à tout moment.