Freigeben über


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

  1. Wählen Sie ALT+F2- aus, um den Performance Profiler in Visual Studio zu öffnen.

  2. Aktivieren Sie das Kontrollkästchen Nachverfolgung der .NET-Objektzuordnung.

    Screenshot des ausgewählten Tools „Nachverfolgung der .NET-Objektzuordnung“.

    Screenshot des ausgewählten Tools „Nachverfolgung der .NET-Objektzuordnung“.

  3. 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.

  4. 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.

    Screenshot: Fenster mit angezeigter Option „Sammlung beenden“.

    Screenshot: Fenster mit angezeigter Option „Sammlung beenden“.

  5. Wählen Sie die Registerkarte Zuordnung aus. Speicherbelegungsdaten wie die folgenden werden angezeigt.

    Screenshot der Registerkarte

    Screenshot der Registerkarte

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.

Screenshot der Einstellungen für das Dotnet-Zuordnungstool.

Screenshot der Einstellungen für das Dotnet-Zuordnungstool.

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.

Screenshot einer angepassten Samplingrate.

Screenshot einer angepassten Samplingrate.

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.

Screenshot des Diagramms für das Dotnet-Zuordnungstool.

Screenshot des Diagramms für das Dotnet-Zuordnungstool.

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.

Screenshot: Gefiltertes Diagramm der .NET-Zuordnungszeit.

Screenshot: Gefiltertes Diagramm der .NET-Zuordnungszeit.

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.

Screenshot der erweiterten Zuordnungsansicht.

Screenshot der erweiterten Zuordnungsansicht.

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:

  • Das Werttypsymbol – Ein Werttyp wie Ganzzahl

  • Das Symbol für die Werttypauflistung – eine Werttypauflistung wie ein Array ganzzahliger Zahlen

  • Das Symbol für Referenztyp – Ein Referenztyp wie Zeichenkette

  • Das Symbol für die Verweistypauflistung – eine Verweistypauflistung wie ein Array von Zeichenfolgen

Anrufsbaum

Die Ansicht Aufrufstruktur zeigt die Funktionsausführungspfade an, die Objekte mit einem hohen Arbeitsspeicherverbrauch enthalten.

Screenshot der Anrufstrukturansicht.

Screenshot der Anrufstrukturansicht.

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.

Screenshot des erweiterten langsamsten Pfads.

Screenshot des erweiterten langsamsten Pfads.

Funktionen

Mit der Ansicht Funktionen können Sie sich Prozesse, Module und Funktionen anzeigen lassen, die Arbeitsspeicher belegen.

Screenshot der Funktionenansicht.

Screenshot der Funktionenansicht.

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.

Screenshot der Sammlungsansicht.

Screenshot der Sammlungsansicht.

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.

Screenshot: Kreisdiagramme in der Ansicht „Sammlung“.

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.