Analysieren der Speicherauslastung mithilfe des .NET Object Allocation-Tools
Mithilfe des .NET Object Allocation-Tools können Sie sehen, wie viel Arbeitsspeicher Ihre App verwendet, und welche Codepfade den meisten Arbeitsspeicher zuweisen.
Nach dem Ausführen des Tools können Sie die Ausführungspfade der Funktion sehen, in denen Objekte zugeordnet werden. Anschließend können Sie durch eine Rückverfolgung bis zum Stamm die Aufrufstruktur ermitteln, die den meisten Arbeitsspeicher belegt.
Ein Lernprogramm zur Verbesserung der Leistung mithilfe des .NET Object Allocation-Tools finden Sie in Fallstudie: Leitfaden für Anfänger zum Optimieren von Code.
Setup
Wählen Sie ALT+F2- aus, um den Performance Profiler in Visual Studio zu öffnen.
Aktivieren Sie das Kontrollkästchen Nachverfolgung der .NET-Objektzuordnung.
Wählen Sie die Schaltfläche Start aus, um das Tool auszuführen.
Wenn Sie die Option Mit angehaltener Sammlung starten vor dem Starten des Profilers aktivieren, werden die Daten erst erfasst, wenn Sie in der Diagnosesitzungsansicht die Schaltfläche Aufzeichnen auswählen.
Nachdem das Tool gestartet wurde, durchlaufen Sie das Szenario, das Sie in Ihrer App profilieren möchten. Wählen Sie dann Datenerfassung beenden aus oder schließen Sie Ihre App, um Ihre Daten anzuzeigen.
Wählen Sie die Registerkarte Zuordnung aus. Speicherbelegungsdaten wie die folgenden werden angezeigt.
Sie können jetzt die Speicherzuordnung der Objekte analysieren.
Während der Sammlung kann das Nachverfolgungstool die profilierte App verlangsamen. Wenn die Leistung des Nachverfolgungstools oder der App langsam ist und Sie nicht jedes Objekt nachverfolgen müssen, können Sie die Samplingrate anpassen. Wählen Sie dazu das Zahnradsymbol neben dem Nachverfolgungstool auf der Profiler-Zusammenfassungsseite aus.
Passen Sie die Samplingrate an die gewünschte Rate an. Diese Änderung trägt dazu bei, die Leistung Ihrer App während der Sammlung und Analyse zu beschleunigen.
Weitere Informationen dazu, wie Sie das Tool effizienter gestalten, finden Sie unter Optimieren der Profiler-Einstellungen.
Grundlegendes zu Ihren Daten
In der folgenden grafischen Ansicht zeigt das obere Diagramm die Anzahl der Liveobjekte in Ihrer App an. Das untere Objektdelta Diagramm zeigt die prozentuale Änderung der App-Objekte an. Rote Linien kennzeichnen, wann eine Garbage Collection stattgefunden hat.
Sie können die tabellarischen Daten filtern, um Aktivität nur für einen angegebenen Zeitraum anzuzeigen, indem Sie einen Zeitraum auswählen. Wenn Sie dies tun, werden die angezeigten Informationen auf den Registerkarten auf den gefilterten Zeitraum beschränkt.
Sie können auch das Diagramm vergrößern oder verkleineren.
Zuteilung
Die Zuordnungsansicht zeigt die Position von Objekten an, die Arbeitsspeicher allokieren, und wie viel Arbeitsspeicher diesen Objekten zugeordnet wird.
Die folgenden Informationen werden in der Ansicht Zuordnung angezeigt:
Die Spalte Typ ist eine Liste der Klassen und Strukturen, die Arbeitsspeicher belegen. Doppelklicken Sie auf einen Typ, um die Rückverfolgung als umgekehrte Aufrufstruktur anzuzeigen. In der -Zuordnung--Ansicht können Sie ausschließlich Elemente in der ausgewählten Kategorie anzeigen, die Arbeitsspeicher beanspruchen.
Die Zuweisungen Spalte stellt die Anzahl der Objekte dar, die Speicher innerhalb eines bestimmten Zuweisungstyps oder einer bestimmten Funktion belegen. Diese Spalte wird nur in den Ansichten Speicherbelegung, Aufrufstruktur und Funktionen angezeigt.
Die Spalten Byte und Durchschnittliche Größe (Byte) werden standardmäßig nicht angezeigt. Um diese anzuzeigen, klicken Sie mit der rechten Maustaste auf die Typ oder Zuordnungen Spalte, und wählen Sie dann die Byte und Durchschnittliche Größe (Byte) Optionen aus, um sie dem Diagramm hinzuzufügen.
Die zwei Spalten ähneln Gesamt (Zuordnungen) und Selbst (Zuordnungen), zeigen jedoch die Menge des belegten Arbeitsspeichers anstelle der Anzahl von Objekten an, die Arbeitsspeicher verbrauchen. Diese Spalten sind nur in der Ansicht Zuordnung enthalten.
Der Modulname Spalte zeigt das Modul an, das die aufrufende Funktion oder den Prozess enthält.
Alle diese Spalten können sortiert werden. Für den Typ und Modulname Spalten können Sie Elemente alphabetisch in aufsteigender oder absteigender Reihenfolge sortieren. Für Zuordnungen, Byte und Durchschnittliche Größe (Byte) können Sie Elemente sortieren, indem Sie den numerischen Wert erhöhen oder verringern.
Symbole
Die folgenden Symbole erscheinen auf den Registerkarten Zuordnungen, Aufrufstruktur und Funktionen:
– Ein Werttyp wie Ganzzahl
– eine Werttypauflistung wie ein Array ganzzahliger Zahlen
– Ein Referenztyp wie Zeichenkette
– eine Verweistypauflistung wie ein Array von Zeichenfolgen
Anrufsbaum
Die Ansicht Aufrufstruktur zeigt die Funktionsausführungspfade an, die Objekte mit einem hohen Arbeitsspeicherverbrauch enthalten.
Die folgenden Informationen werden in der Ansicht Aufrufstruktur angezeigt:
- Die Spalte Funktionsname zeigt den Prozess oder den Namen der Funktion an, die Objekte mit hohem Arbeitsspeicherverbrauch enthält. Die Anzeige basiert auf der Ebene des Knotens, den Sie untersuchen.
- Die Spalten Gesamt (Zuordnungen) und Gesamtgröße (Byte) zeigen die Anzahl von zugeordneten Objekten und die Menge von Arbeitsspeicher, die von einer Funktion und allen von ihr aufgerufenen Funktionen belegt wird. Die Spalte Gesamtgröße (Byte) ist standardmäßig ausgeblendet.
- Die Self (Allocations) und Self-Size (Bytes) Spalten zeigen die Anzahl der zugeordneten Objekte und den Arbeitsspeicher an, der von einer einzelnen ausgewählten Funktion oder einem Zuordnungstyp verwendet wird.
- Die Spalte Durchschnittliche Größe (Byte) zeigt die gleichen Informationen wie in der Ansicht Zuordnungen an. Diese Spalte ist standardmäßig ausgeblendet.
- Der Modulname Spalte zeigt das Modul an, das die aufrufende Funktion oder den Prozess enthält.
Weitere Optionen, die in der Ansicht Aufrufstruktur angezeigt werden, sind:
- Wenn Sie auf die Schaltfläche Langsamsten Pfad erweitern klicken, wird ein Funktionsausführungspfad hervorgehoben, der viele Objekte enthält, die Arbeitsspeicher belegen. Der Algorithmus beginnt mit einem Knoten, den Sie auswählen, und hebt den Pfad mit den meisten Zuordnungen hervor, um Sie bei Ihrer Untersuchung zu leiten.
- Auf der Schaltfläche "Hot Path anzeigen" werden die Flammsymbole angezeigt oder ausgeblendet, die angeben, welche Knoten Teil des heißen Pfads sind.
Funktionen
Mit der Ansicht Funktionen können Sie sich Prozesse, Module und Funktionen anzeigen lassen, die Arbeitsspeicher belegen.
Informationen, die in der Ansicht Funktionen angezeigt werden, umfassen:
In der Spalte Name werden Prozesse als Knoten der höchsten Ebene angezeigt. Unter Prozessen befinden sich Module, und unter Modulen befinden sich Funktionen.
Die folgenden Spalten, die die gleichen Informationen wie in den Ansichten Zuordnung und Aufrufstruktur anzeigen:
- Summe (Zuweisungen)
- Selbst (Zuordnungen)
- Gesamtgröße (Byte)
- Automatische Größe (Byte)
- Durchschnittliche Größe (Byte)
Sammlung
In der Ansicht Sammlung können Sie sehen, wie viele Objekte während der Garbage Collection gesammelt oder beibehalten wurden.
Die folgenden Informationen werden in der Ansicht Collection angezeigt.
- Die Spalte GC zeigt die ID dieser Garbage Collection im Lebenszyklus der ausführbaren Datei an.
- Die Spalte Generation zeigt die Generation der Garbage Collection an.
- Die Spalte GC-Typ zeigt den Typ dieser Garbage Collection an.
- Die Spalte Ursache für GC zeigt die Ursache für dieses Garbage Collection-Ereignis an.
- Die Spalte Dauer der Pause zeigt den Zeitpunkt an, zu dem die Ausführung blockiert wurde, da der Garbage Collector den Heap exklusiv verwenden muss. Für eine Garbage Collection im Hintergrund ist dieser Wert klein.
- Die Spalte LOH-Größe zeigt die Größe des Heaps für große Objekte an, nachdem der Garbage Collector ausgeführt wurde.
- Die Spalte POH-Größe zeigt die Größe des Heaps für angeheftete Objekte an, nachdem der Garbage Collector ausgeführt wurde.
- Die Spalte Finalisierbare überlebende Objekte (MB) zeigt die Anzahl der MB von Objekten an, die Finalizer (Destruktoren) aufweisen, die nach der Garbage Collection noch vorhanden sind.
- Die Spalte Angeheftete Objekte zeigt die Anzahl der angehefteten Objekte an, die von dieser Garbage Collection höher gestuft wurden.
- In der Spalte Gesammelt wird die Anzahl der Objekte angezeigt, die vom Garbage Collector erfasst wurden.
- Die Spalte Noch vorhanden zeigt, wie viele Objekte nach der Ausführung des Garbage Collectors noch vorhanden waren.
Wenn Sie eine Zeile auswählen, zeigt diese Ansicht auch Kreisdiagramme an, um gesammelte und überlebende Objekte nach Typ zu visualisieren.
Filterwerkzeuge
Die Ansichten Zuordnungen, Aufrufstruktur und Funktionen enthalten alle die Optionen Nur eigenen Code anzeigen und Nativen Code anzeigen und ein Filterfeld.
- "Nur mein Code anzeigen" reduziert Systeme, Frameworks und anderen Nichtbenutzercode in [Externer Code] Frames, sodass Sie sich nur auf Ihren Code konzentrieren können. Weitere Informationen finden Sie unter Debuggen von Benutzercode mit just My Code.
- Systemeigenen Code anzeigen zeigt systemeigenen Code innerhalb des Analyseziels an und kann Nichtbenutzercode enthalten.
- Mit dem Filterfeld können Sie die -Namen-- oder -Funktionsnamen--Spalte anhand des angegebenen Werts filtern. Geben Sie einen Textwert in das Feld ein. In der Tabelle werden dann nur Typen angezeigt, die diese Zeichenfolge enthalten.