Instrumentieren von .NET-Anwendungen 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, es basiert jedoch nicht auf der CPU-Auslastung, sondern auf der Gesamtbetrachtungszeit. 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 Instrumentationstools finden Sie unter Übersicht über die Instrumentation und Verbessern der Leistung von Visual Studio mit dem neuen Instrumentierungstool.

Instrumentieren Ihrer Anwendung

  1. Wählen Sie Alt+F2 (oder Debuggen von > Leistungs-Profiler), 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 mit Dialogfeld „Zu instrumentierende Elemente auswählen“

    Ab Visual Studio 2022 (Version 17.11 Preview 1) speichert der Profiler die ausgewählten Elemente für die nächste Profilerstellung.

  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 Sammlung beenden aus, oder schließen Sie Ihre App, um die Daten anzuzeigen.

Analysieren des Instrumentierungsberichts

Ihre Profilerstellungsdaten werden in Visual Studio angezeigt.

Screenshot mit .NET-Instrumentierungsdaten.

Die Ansicht „Instrumentierungsdaten“ zeigt eine Liste der Funktionen an, geordnet nach der Ausführungsdauer. Hierbei wird die Funktion mit der längsten Laufzeit unter Top-Funktionen an erster Stelle angezeigt. Im Abschnitt Langsamster Pfad wird die Aufrufliste für die Funktionen angezeigt, die am meisten Zeit in Anspruch nehmen. Anhand dieser Listen können Sie feststellen, bei welchen Funktionen es zu Leistungsengpässen kommt.

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

Die verfügbaren Daten ähneln denen des Tools CPU-Auslastung, mit der Ausnahme, dass sie auf der Uhrzeit und der Anzahl der Aufrufe statt auf der CPU-Auslastung basieren.

Analysieren von Erkenntnissen

Wenn ein Einblick im Abschnitt Top Insights auftaucht, verwenden Sie den angegebenen Link, um weitere Informationen über das identifizierte Problem zu erhalten. Weitere Informationen finden Sie unter CPU Insights. Beachten Sie jedoch, dass sich die Informationen für das Instrumentierungstool auf die Uhrzeit und nicht auf die CPU-Auslastung beziehen.

Wenn Sie Copilot verwenden, können Sie außerdem über die Schaltfläche Copilot fragen das Chat-Fenster von Copilot öffnen. Copilot wird Ihnen auf der Grundlage einer Untersuchung Ihres Codes und der identifizierten Probleme Vorschläge machen.

Detaillierte Berichte zur Instrumentierung analysieren

Um den Instrumentierungsbericht zu analysieren, klicken Sie auf Details öffnen oder klicken Sie auf eine der oberen Funktionen, um die Ansicht Funktionen zu öffnen.

Der Bericht bietet verschiedene Ansichten der Diagnosedaten:

  • Aufrufer/Aufgerufener
  • Aufrufstruktur
  • Module
  • Functions
  • Flammendiagramm

In allen Ansichten außer Aufrufer/Aufgerufender ist 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 für Sie interessante Funktion doppelklicken, um die Quelle der Funktion anzuzeigen. Damit erhalten Sie auch eine Hervorhebung, die anzeigt, wo in dieser Funktion Zeit verbraucht wird. Die Tabelle zeigt Spalten mit Daten wie der in der Funktion verbrachten Zeit, einschließlich der aufgerufenen Funktionen (Gesamt), und eine zweite Spalte, die die in einer Funktion verbrachte Zeit zeigt, ohne die aufgerufenen Funktionen (Selbst).

Diese Daten können bei der Bewertung helfen, ob die Funktion selbst ein Leistungsengpass ist. Ermitteln Sie, wie viele Daten die Methode anzeigt, um festzustellen, ob Code oder Runtimebibliotheken von Drittanbietern der Grund dafür sind, dass Ihre Endpunkte langsam oder ressourcenintensiv sind.

Weitere Informationen zur Verwendung des Flammendiagramms finden Sie unter Identifizieren der langsamsten Pfade mit einem Flammendiagramm.

Aufrufbaum der Instrumentierung

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

Sie können auf die Schaltflächen Hot Path erweitern und Hot Path anzeigen klicken, um in der Baumansicht die Funktionsaufrufe zu sehen, die die meiste Zeit verbrauchen.

Screenshot der Struktur der Aufrufstruktur

Hier finden Sie weitere Informationen zu den Spaltenwerten:

  • Gesamt zeigt an, wie viel Zeit für die Funktion und alle von ihr aufgerufenen Funktionen aufgewendet wurde. Hohe Gesamt-Werte weisen auf die Funktionen hin, die die meiste Zeit verbrauchen.

  • Selbst zeigt an, wie viel Zeit im Funktionskörper verbracht wurde, ohne die Zeit, die in den Funktionen verbracht wurde, die von der Funktion aufgerufen wurden. Hohe Selbst-Werte können auf einen Leistungsengpass innerhalb der Funktion selbst hinweisen.

  • Aufrufanzahl gibt an, wie oft eine Funktion aufgerufen wurde.

  • Modul Der Name des Moduls, das die Funktion enthält.