Frage

Ich möchte so etwas wie CLR-Profile in .Net 2.0 verwenden, um zu sehen, welche Objekte zu einem bestimmten Zeitpunkt (eines ASP.Net-Workerprozesses) mehr Platz im Heap beanspruchen.

Mit dem CLR-Profiler kann ich jedoch nur eine App STARTEN, nicht an eine bestehende anhängen.Ich gehe davon aus, dass das daran liegt, dass es auch Zuteilungen und GC verfolgt, aber das interessiert mich nicht sehr.Ich hätte gerne etwas, das einen Schnappschuss des aktuellen Zustands des Heaps macht und mir zeigt, was da ist und wie viele Objekte jeder Art es gibt und wie viele Bytes insgesamt von jedem Objekttyp verwendet werden.

Irgendwelche Ideen?

War es hilfreich?

Lösung

.Net Memory Profiler ist genau das, was Sie brauchen.Es ist nicht kostenlos, aber es gibt eine Testversion.Eigentlich habe ich die Testversion genutzt, um Lecks in unserem letzten Projekt zu finden.Eine bemerkenswerte Funktion ist:

Identifizieren Sie einfach Speicherlecks, indem Sie Schnappschüsse des .NET -Speichers sammeln und vergleichen

Ich denke, das ist es, wonach Sie suchen.

Andere Tipps

  • Schließen Sie einen Debugger an

cdb -p

  • Laden Sie .net-Debugger-Erweiterungen

.loadby sos mscorwks

  • Sichern Sie den Heap in einem Format, das der CLRProfiler versteht

!TraverseHeap heap.txt

  • Trennen Sie den Debugger

qd

  • Laden Sie heap.txt in der clrprofiler-App

Dieser Artikel von MSDN spricht darüber, wie man den kostenlosen CLR Profiler zum Vergleich mit Instanzen des Stapels verwendet.Sie haben Recht, dass Sie CLR Profiler derzeit nicht an einen laufenden Prozess anhängen können (der Artikel erläutert den Grund dafür), aber es sieht so aus, als ob Sie das bald schaffen werden.

Haben Sie sich RedGates .NET Profiler angesehen?

Es ist schon eine Weile her, seit ich es verwendet habe, aber ich bin mir nicht sicher, ob Sie jederzeit eine Verbindung zu jedem CLR-Prozess herstellen können.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top