Freigeben über


Instrumentieren Sie Ihre .NET-Anwendung in Visual Studio (C#, C++, Visual Basic, F#)

Mit dem Release von Visual Studio 2022 Version 17.5 können Sie das neue Tool für die dynamische Instrumentierung verwenden. Dieses Tool zeigt die genaue Anzahl der Aufrufe Ihrer Funktionen an und ist schneller als die vorherige Version des Instrumentierungstools. Dieses Tool unterstützt die .NET Core-Instrumentierung, ohne PDBs zu benötigen. Ab Visual Studio 2022 Version 17.6 Preview 2 unterstützt das Tool auch C/C++.

Das Tool ähnelt dem CPU-Auslastungstool, mit der Ausnahme, dass es auf der Wanduhrzeit anstelle der CPU-Auslastung basiert. Dies bedeutet, dass im Gegensatz zum CPU-Auslastungstool blockierte Zeit (z. B. Wartezeit bei Sperren) in der Instrumentierungsüberwachung angezeigt wird. Weitere Informationen zur effektiven Verwendung des Instrumentierungstools finden Sie unter Instrumentierungsübersicht und Fallstudie: Isolieren eines Leistungsproblems.

Ihre Anwendung instrumentieren

  1. Wählen Sie ALT+F2 (oder Debug > Leistungs-Profiler) aus, um den Leistungs-Profiler in Visual Studio zu öffnen.

  2. Aktivieren Sie das Kontrollkästchen Instrumentierung.

    Screenshot: Auswahl des Tools „Instrumentierung“.

    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.

    Hinweis

    Wenn das Tool nicht ausgewählt werden kann, deaktivieren Sie die Kontrollkästchen aller anderen Tools, da einige Tools allein ausgeführt werden müssen. Weitere Informationen zum gemeinsamen Ausführen von Tools finden Sie unter Gleichzeitiges Verwenden mehrerer Profilertools.

    Wenn das Tool immer noch nicht verfügbar ist, überprüfen Sie, ob Ihr Projekt die zuvor genannten Anforderungen erfüllt. Vergewissern Sie sich, dass sich Ihr Projekt im Releasemodus befindet, um die Daten möglichst genau zu erfassen.

  3. Klicken Sie auf die Schaltfläche Start, um das Tool auszuführen.

  4. Wählen Sie die Elemente in Ihrem Programm aus, die Sie instrumentieren möchten.

    Screenshot: Dialogfeld „Zu instrumentierende Elemente auswählen“.

    Ab Visual Studio 2022, Version 17.11, speichert der Profiler die ausgewählten Elemente für die nächste Ausführung zur Profilerstellung.

    Ab Visual Studio 2022 Version 17.13 Preview 1 können Sie Elemente auswählen, die für C++ instrumentiert werden sollen.

  5. Wählen Sie OK aus.

  6. Gehen Sie nach dem Start des Tools das Szenario durch, für das Sie in Ihrer App ein Profil erstellen möchten. Wählen Sie dann Datenerfassung beenden aus, oder schließen Sie die App, um Ihre Daten anzuzeigen.

Analysieren Sie den Instrumentierungsbericht

Ihre Profilerstellungsdaten werden in Visual Studio angezeigt.

Screenshot mit .NET-Instrumentierungsdaten.

In der Datenansicht "Instrumentierung" wird eine Liste der Funktionen angezeigt, die nach Ausführungszeit sortiert sind, wobei die am längsten ausgeführte Funktion oben unter Top-Funktionensteht. Im Abschnitt Langsamster Pfad wird die Aufrufliste für die Funktionen angezeigt, die am meisten Zeit in Anspruch nehmen. Diese Listen können Ihnen helfen, Funktionen zu identifizieren, bei denen Leistungsengpässe auftreten.

Klicken Sie auf eine Funktion, an der Sie interessiert sind, und es wird eine detailliertere Ansicht angezeigt.

Die verfügbaren Daten ähneln denen im CPU-Auslastungstool, sie basieren jedoch nicht auf der CPU-Auslastung, sondern auf der Gesamtbetrachtungszeit und Aufrufanzahl.

Analysieren von Erkenntnissen

Wenn im Abschnitt Top Insights Einblicke angezeigt werden, verwenden Sie den bereitgestellten Link, um weitere Informationen zum identifizierten Problem zu erhalten. Weitere Informationen finden Sie unter CPU-Einblicke, beachten Sie jedoch, dass Informationen für das Instrumentierungstool spezifisch für die Wanduhrzeit und nicht für die CPU-Auslastung sind.

Wenn Sie Copilot verwenden, verwenden Sie außerdem die Schaltfläche Ask Copilot, um das Copilot-Chatfenster zu öffnen, und Copilot bietet Vorschläge basierend auf einer Untersuchung Ihres Codes und aller identifizierten Probleme.

Analysieren detaillierter Berichte zur Instrumentierung

Klicken Sie zum Analysieren des Instrumentierungsberichts auf Details öffnen, oder klicken Sie auf eine der wichtigsten Funktionen, um die Ansicht Funktionen zu öffnen.

Der Bericht bietet verschiedene Ansichten der Diagnosedaten:

Ansicht Beschreibung
Aufrufer/Aufgerufener Detaillierte Ansicht der in einer bestimmten Funktion aufgewendeten Zeit, der funktion(n), die sie aufgerufen hat, und der funktion(n), die sie aufruft. Die Leistungsdaten werden für den Datensammlungszeitraum aggregiert. Sie können aufrufende Funktionen und aufgerufene Funktionen auswählen, um den Aufrufpfad zu durchlaufen.
Aufrufstruktur Hierarchische Ansicht des Funktionsaufrufpfads. Wird verwendet, um Anrufpfade zu identifizieren, die die meiste Zeit in Anspruch nehmen (heißer Pfad).
Module Ansicht der in einzelnen Modulen aufgewendeten Zeit, aggregiert über den Datensammlungszeitraum. Wird verwendet, um Module zu identifizieren, die aufgrund einer Kombination aus hohen Anrufanzahlen und/oder Leistungsproblemen leistungsengpässe sein können.
Funktionen Ansicht der in einzelnen Funktionen aufgewendeten Zeit, aggregiert über den Datensammlungszeitraum. Wird verwendet, um Funktionen zu identifizieren, die aufgrund einer Kombination aus hohen Anrufanzahlen und/oder Leistungsproblemen leistungsengpässe sein können.
Flame-Diagramm Hierarchische Ansicht des Funktionsaufrufpfads in einer Flammendiagrammvisualisierung. Wird verwendet, um Anrufpfade zu identifizieren, die die meiste Zeit in Anspruch nehmen (heißer Pfad).

In allen Ansichten (mit Ausnahme von Aufrufer/Angerufener) wird der Diagnosebericht nach Gesamt [Einheit, %] sortiert, vom höchsten zum niedrigsten Wert. Ändern Sie die Sortierreihenfolge oder sortieren Sie eine Spalte, indem Sie auf die Spaltenüberschrift klicken. Sie können auf eine Funktion doppelklicken, an der Sie interessiert sind, und sehen Sie die Quelltexte der Funktion sowie Hervorhebungen, die zeigen, wo die Zeit in dieser Funktion aufgewendet wird. In der Tabelle werden Spalten mit Daten angezeigt, z. B. die in der Funktion aufgewendete Zeit, einschließlich der aufgerufenen Funktionen (Total), und eine zweite Spalte, die die in einer Funktion aufgewendete Zeit ohne die aufgerufenen Funktionen zeigt (Self).

Diese Daten können bei der Bewertung helfen, ob die Funktion selbst einen Leistungsengpass darstellt. Ermitteln Sie, wie viele Daten die Methode anzeigt, um festzustellen, ob Drittanbieter-Code oder Laufzeitbibliotheken der Grund dafür sind, dass Ihre Endpunkte langsam oder ressourcenintensiv sind.

Weitere Informationen zur Verwendung des Flame-Diagramms finden Sie unter Identifizieren der langsamsten Pfade mit einem Flame-Diagramm.

Aufrufstruktur der Instrumentierung

Wählen Sie zum Anzeigen der Aufrufstruktur im Bericht den übergeordneten Knoten aus. Daraufhin wird standardmäßig die Seite Instrumentierung in der Ansicht Aufrufer/Aufgerufener geöffnet. Wählen Sie in der Dropdownliste Aktuelle Ansicht die Option Aufrufstruktur aus. Die Anrufstrukturansicht kann Ihnen helfen, schnell Leistungsengpässe zu erkennen.

Sie können auf die Schaltflächen Langsamsten Pfad erweitern und Langsamsten Pfad anzeigen klicken, um die Funktionsaufrufe anzuzeigen, die die meiste Gesamtbetrachtungszeit in der Ansicht der Aufrufstruktur verwenden.

Screenshot der Aufrufstruktur.

Hier finden Sie weitere Informationen zu den Spaltenwerten:

  • Die Summe gibt an, wie viel Zeit in der Funktion und allen von ihr aufgerufenen Funktionen aufgewendet wurde. Hohe Werte von Gesamt deuten auf die Funktionen hin, die die meiste Prozessorzeit verbrauchen.

  • Selbst gibt an, wie viel Zeit im Funktionstext verbracht wurde, abzüglich der Zeit, die in davon aufgerufenen Funktionen verbracht wurde. Hohe Selbst- Werte können auf einen Leistungsengpass innerhalb der Funktion selbst hinweisen.

  • Die Aufrufanzahl gibt an, wie oft eine Funktion aufgerufen wird.

  • Modul gibt den Namen des Moduls, das die Funktion enthält, an.

Asynchrone Aufrufe in der Instrumentation-Aufrufstruktur (.NET)

Ab Visual Studio 2022, Version 17.13 Preview 2, schachteln Ansichten, die eine visuelle Aufrufstruktur darstellen, asynchrone .NET-Aufrufe unter den Funktionen, in denen der asynchrone Aufruf durchgeführt wurde. Dies vereinfacht das Nachverfolgen des Ausführungsablaufs in einer einzelnen, einheitlichen Stapelablaufverfolgung. Dies kann Ihnen helfen, Leistungsengpässe schnell zu erkennen.

Die einheitliche Stapelablaufverfolgung wird auf der Zusammenfassungsseite in der Ansicht Anrufstruktur und im Abschnitt Langsamster Pfad angezeigt. Asynchrone Knoten werden mit dem [Async Call] Deskriptor angezeigt.

Screenshot, der die Anrufbaumstruktur für asynchrone Aufrufe zeigt.

Sie können die Anzeige einer asynchronen Aufrufliste zusammenheften, indem Sie Asynchrone Stapel zusammenfassen unter der Option Filter in der Zusammenfassungsansicht der Profilerstellung auswählen. Die Einstellung ist standardmäßig aktiviert.

Screenshot der Option „Asynchrone Stapel zusammenfassen“