Einführung in Profilerstellungstools (C#, Visual Basic, C++, F#)

Gilt für:JaVisual Studio NeinVisual Studio für MacNeinVisual Studio Code

Visual Studio bietet eine Vielzahl von Profilerstellungstools, um Ihnen bei der Diagnose von unterschiedlichen Leistungsprobleme zu helfen, die vom App-Typ abhängen. In diesem Artikel werfen wir einen kurzen Blick auf die gängigsten Profilerstellungstools.

Hilfe bei der Auswahl des richtigen Tools und Informationen zur Unterstützung des Profilerstellungstools für verschiedene App-Typen finden Sie unter Welches Tool sollte ich verwenden?.

Verwenden eines Profilers zum Verbessern der Leistung

Entwickler*innen, die für die Codebasis ihres Teams verantwortlich waren oder eine Web-App geschrieben haben, werden sich möglicherweise gefragt haben, warum ihre App langsame Antwortzeiten liefert? Die Probleme liegen häufig bei der Produktion, und es ist schwierig, zu diesem Zeitpunkt eine Untersuchung durchzuführen. Diese Profilerstellungstools können Ihnen aber dabei helfen, genügend Informationen und Beweise zu diesem Problem zu erfassen.

Es gibt mehrere Möglichkeiten, Leistungsprobleme zu diagnostizieren, wenn Sie mit APIs arbeiten. Die Verwendung eines Profilers kann aber helfen, mögliche Ursachen schnell zu identifizieren oder auszuschließen, sodass Sie einen klaren Pfad zur Lösung Ihres Problems haben.

In der Softwareentwicklung ist ein Profiler ein Tool, mit dem Sie die Leistung Ihrer Anwendungen analysieren können, um leistungsschwachen Code zu verbessern. Profilerstellungs- und Diagnosetools helfen bei der Diagnose von Speicher- und CPU-Auslastung und anderen Problemen auf Anwendungsebene. Mit diesen Tools können Sie Leistungsdaten sammeln, während Sie Ihre Anwendung ausführen.

Ein Profiler kann Ihnen helfen, schnell fundierte Entscheidungen zu treffen, indem er eine visuelle Darstellung der Ausführungszeiten und CPU-Auslastung für Ihre Anwendung bereitstellt. Probleme sind oftmals viel einfacher und schneller zu verstehen und zu beheben, wenn sie in einem Diagramm der Ausführungszeiten oder der CPU-Auslastung dargestellt werden.

Messen der Leistung beim Debuggen

Die Profilerstellungstools, auf die Sie während einer Debugsitzung zugreifen können, stehen im Fenster „Diagnosetools“ zur Verfügung. Das Fenster „Diagnosetools“ wird automatisch angezeigt, wenn Sie es nicht deaktiviert haben. Klicken Sie zum Aufrufen des Fensters auf Debuggen / Windows / Diagnosetools anzeigen (oder drücken Sie auf Strg + Alt + F2). Wenn das Fenster geöffnet ist, können Sie Tools auswählen, für die Sie Daten sammeln möchten.

Fenster „Diagnosetools“

Fenster „Diagnosetools“

Während Sie Debuggen, können Sie das Diagnosetools-Fenster zum Analysieren der CPU und Speicherauslastung verwenden, und Sie können Ereignisse anzeigen, die Leistungsbezogene Informationen zeigen.

Zusammenfassung „Diagnosetools“

Zusammenfassung „Diagnosetools“

Das Fenster Diagnosetools ist ein gängiges Instrument zum Profilen von Apps. Aber für Releasebuilds können Sie stattdessen auch eine nachträgliche Analyse Ihrer App durchführen. Weitere Informationen zu verschiedenen Herangehensweisen finden Sie unter Ausführen von Profilerstellungstools mit oder ohne Debugger. Informationen zur Unterstützung der Profilerstellungstools für die verschiedenen App-Typen finden Sie unter Welches Tool soll ich verwenden?.

Zu den Tools, die im Fenster „Diagnosetools“ oder während einer Debugsitzung verfügbar sind, zählen:

Tipp

Verwenden Sie den Neustart, um die Startseite zu überspringen und automatisch mit Ihren vorherigen Einstellungen zu starten. Drücken Sie hierfür ALT+F2, oder wählen Sie Debuggen > Leistungs-Profiler aus.

Hinweis

Windows 8 und höher ist erforderlich, um die Profilerstellungstools mit dem Debugger auszuführen (Fenster Diagnosetools). Sie können die Post-Mortem-Tools mit Windows 7 und höher verwenden.

Messen der Leistung in Releasebuilds

Tools im Leistungs-Profiler dienen zur Analyse der Releasebuilds. Im Leistungs-Profiler können Sie Diagnoseinformationen sammeln, während die App ausgeführt wird, und anschließend die gesammelten Informationen überprüfen, nachdem die App angehalten wurde (eine Post-Mortem-Analyse).

Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2).

Leistungs-Profiler

Leistungs-Profiler

Weitere Informationen zur Verwendung des Tools „CPU-Auslastung“ oder „Speicherauslastung“ im Leistungs-Profiler im Vergleich zu den in den Debugger integrierten Tools finden Sie unter Ausführen von Profilerstellungstools mit oder ohne Debugger.

Im Leistungs-Profiler verfügbare Tools:

Informationen zur Unterstützung der Profilerstellungstools für die verschiedenen App-Typen finden Sie unter Welches Tool soll ich verwenden?.

In einigen Szenarien können Sie im Fenster mehrere Profilerstellungstools auswählen. Tools wie z.B. CPU-Auslastung stellen möglicherweise ergänzende Daten bereit, die Sie als Hilfe bei Ihrer Analyse verwenden können. Sie können auch den Befehlszeilen-Profiler verwenden, um Szenarios mit mehreren Profilerstellungstools zu ermöglichen.

Untersuchen der Leistung mit PerfTips

In den meisten Fällen besteht die einfachste Methode zum Anzeigen von Leistungsinformationen darin, PerfTips zu verwenden. Mit PerfTips können Sie Leistungsinformationen anzeigen, während Sie mit Ihrem Code interagieren. Sie können Informationen wie z.B. die Dauer des Ereignisses überprüfen (gemessen daran, wann der Debugger zuletzt angehalten wurde oder wann die App gestartet ist). Wenn Sie beispielsweise die Schritt-für-Schritt-Ausführung des Codes (F10, F11) verwenden, zeigt PerfTips Ihnen die App-Laufzeitdauer vom vorherigen Schritt zum nächsten Schritt an.

Profilerstellungstour „PerfTips“

Profilerstellungstour „PerfTips“

Sie können PerfTips verwenden, um zu untersuchen, wie lange die Ausführung eines Codeblocks oder einer einzelnen Funktion dauert.

PerfTips zeigt dieselben Ereignisse an, die auch in der Ansicht Ereignisse der Diagnosetools angezeigt werden. In der Ansicht Ereignisse können Sie verschiedene Ereignisse anzeigen, die beim Debuggen auftreten, z. B. das Festlegen eines Breakpoints oder einer Schritt-für-Schritt-Codeausführung.

Ansicht „Ereignisse“ in den Diagnosetools

Ansicht „Ereignisse“ in den Diagnosetools

Hinweis

Wenn Sie über Visual Studio Enterprise verfügen, sehen Sie auch IntelliTrace-Ereignisse auf dieser Registerkarte.

Analysieren der CPU-Auslastung

Mit dem CPU-Auslastungstool können Sie die Analyse der Leistung Ihrer App starten. So erfahren Sie mehr über die CPU-Ressourcen, die Ihre App in Anspruch nimmt. Sie können das in den Debugger integrierte CPU-Auslastungstool oder das Post-Mortem-CPU-Auslastungstool verwenden.

Wenn Sie das in den Debugger integrierte CPU-Auslastungstool verwenden, öffnen Sie das Fenster „Diagnosetool“ (wenn es geschlossen ist, wählen Sie Debuggen/Fenster/Diagnosetools anzeigen). Öffnen Sie beim Debuggen die Ansicht Zusammenfassung, und wählen Sie CPU-Profilerstellung aufzeichnen aus.

Aktivieren der CPU-Auslastung in den Diagnosetools

Aktivieren der CPU-Auslastung in den Diagnosetools

Eine Möglichkeit, das Tool einzusetzen, ist das Festlegen zweier Haltepunkte im Code, einen am Anfang und einen am Ende der Funktion, oder in dem Codebereich, den Sie analysieren möchten. Überprüfen Sie die Profilerstellungsdaten, wenn Sie beim zweiten Haltepunkt angehalten werden.

Die Ansicht CPU-Auslastung 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 mit der höchsten CPU-Auslastung angezeigt. Anhand dieser Listen können Sie feststellen, bei welchen Funktionen es zu Leistungsengpässen kommt.

Ansicht „CPU-Auslastung“ in den Diagnosetools

Die Ansicht CPU-Auslastung zeigt eine Liste der Funktionen, geordnet nach den am längsten ausgeführten, mit der längsten Funktion oben. Dies kann helfen, Sie zu Funktionen zu führen, in denen Leistungsengpässe auftauchen.

Ansicht „CPU-Auslastung“ in den Diagnosetools

Klicken Sie auf eine für Sie interessante Funktion, um die detailliertere Ansicht Aufrufstruktur zu öffnen, in der die ausgewählte Funktion hervorgehoben ist. Die Tabelle enthält Spalten mit Daten wie z. B. die in der Funktion verbrachte Zeit einschließlich der aufgerufenen Funktionen (CPU gesamt), und eine zweite Spalte, die die in einer Funktion verbrachte Zeit ohne die aufgerufenen Funktionen angibt (Eigen-CPU). Diese Daten können bei der Bewertung helfen, ob die Funktion selbst ein Leistungsengpass ist.

Tipp

Der Visual Studio-Profiler unterstützt sowohl das Sammeln als auch das Anzeigen von Ablaufverfolgungen. Der Profiler kann auch Ablaufverfolgungen anzeigen, die zuvor von anderen Tools erfasst wurden, z. B. dotnet-trace. Dotnet-trace erzeugt Sampling-Ergebnisse, keine instrumentierte Ablaufverfolgung. Weitere Informationen finden Sie unter dotnet-trace.

Aufrufer-/Aufgerufener-Ansicht „Schmetterling“ in den Diagnosetools

Klicken Sie auf eine Funktion, an der Sie interessiert sind. Ihnen wird eine detailliertere „Schmetterlingsansicht“ aus drei Bereichen angezeigt. Die ausgewählte Funktion befindet sich in der Mitte des Fensters, die aufrufende Funktion auf der linken Seite und die aufgerufenen Funktionen auf der rechten Seite. Unter Funktionsrumpf wird die Gesamtzeit (und der Prozentsatz der Zeit) angezeigt, die im Funktionsrumpf aufgewendet wurde. Die Zeit, die in aufrufenden und aufgerufenen Funktionen aufgewendet wurde, ist nicht enthalten. Diese Daten können bei der Bewertung helfen, ob die Funktion selbst ein Leistungsengpass ist.

Aufrufer-/Aufgerufener-Ansicht „Schmetterling“ in den Diagnosetools

Analysieren der Speicherauslastung

Im Fenster Diagnosetools können Sie auch das Tool Speicherauslastung verwenden, um die Arbeitsspeicherauslastung in Ihrer App auszuwerten. Beispielsweise können Sie die Anzahl und Größe der Objekte auf dem Heap anzeigen. Sie können das in den Debugger integrierte Speicherauslastungstool oder das Post-Mortem-Speicherauslastungstool im Leistungs-Profiler verwenden.

.NET-Entwickler können zwischen dem .NET-Tool für Objektzuordnungen und dem Tool zur Speicherauslastung auswählen.

  • Das Tool für .NET-Objektzuordnungen unterstützt Sie dabei, Zuteilungsmuster und Anomalien in Ihrem .NET-Code zu entdecken, und es unterstützt Sie beim Identifizieren häufiger Probleme mit der Garbage Collection. Dieses Tool wird nur zur Nachbereitung ausgeführt. Sie können dieses Tool auf lokalen Computern oder Remotecomputern ausführen.
  • Das Tool für Arbeitsspeicherauslastung ist hilfreich für das Identifizieren von Arbeitsspeicherverlusten, die bei .NET-Apps nicht allzu häufig auftreten. Wenn Sie Debuggerfeatures für das Überprüfen des Arbeitsspeichers verwenden müssen, z. B. für das schrittweise Ausführen von Code, wird das im Debugger integrierte Tool für die Arbeitsspeicherauslastung empfohlen.

Sie müssen mindestens eine Arbeitsspeichermomentaufnahme erfassen, um die Arbeitsspeicherauslastung mit dem Speicherauslastungstool zu analysieren. Häufig ist es zum Analysieren von Arbeitsspeicher am Besten, wenn man zwei Momentaufnahmen macht, die erste direkt vor einem vermuteten Arbeitsspeicherproblem und die zweite Momentaufnahme direkt nach dem Auftreten eines vermuteten Arbeitsspeicherproblems. Anschließend können Sie einen Vergleich der zwei Momentaufnahmen anzeigen und sehen, was genau sich geändert hat. In der folgenden Abbildung wird gezeigt, wie eine Momentaufnahme mit dem in den Debugger integrierten Tool erstellt wird.

Erstellen einer Momentaufnahme in den Diagnosetools

Erstellen einer Momentaufnahme in den Diagnosetools

Wenn Sie einen der Pfeillinks auswählen, erhalten Sie eine Differenzansicht des Heaps (ein roter Pfeil nach oben für Memory Usage Increase (Zunahme der Speicherauslastung) weist auf eine zunehmende Objektanzahl (links) oder eine höhere Heapgröße (rechts) hin). Wenn Sie den richtigen Link klicken, erhalten Sie eine differenzielle Heapansicht, sortiert nach Objekten, die in der Heapgröße am meisten erhöht wurden. Dadurch können Sie Speicherprobleme ermitteln. Zum Beispiel wurden in der folgenden Abbildung die Bytes mithilfe des ClassHandlersStore-Objekts in der zweiten Momentaufnahme um 3492 Bytes erhöht.

Differenzansicht „Heap“ in den Diagnosetools

Differenzansicht „Heap“ in den Diagnosetools

Wenn Sie statt in der Ansicht Speicherauslastung auf den Link auf der linken Seite klicken, ist die Heapansicht nach der Objektanzahl organisiert. Die Objekte eines bestimmten Typs, der die Zahl am meisten erhöht hat, werden oben angezeigt (sortiert nach der Spalte Anzahlunterschied).

Analysieren von asynchronem Code (.NET)

Mit dem Tool .NET Async können Sie die Leistung von asynchronem Code in Ihrer Anwendung analysieren. Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2).

Das Tool zeigt jeden asynchronen Vorgang in einer Listenansicht. Sie sehen für einen asynchronen Vorgang Informationen wie Startzeit, Endzeit und Gesamtzeit.

Angehaltenes Tool .NET Async

Analysieren von asynchronem Code (.NET)

Mit dem Tool .NET Async können Sie die Leistung von asynchronem Code in Ihrer Anwendung analysieren. Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2).

Das Tool zeigt jeden asynchronen Vorgang in einer Listenansicht. Sie sehen für einen asynchronen Vorgang Informationen wie Startzeit, Endzeit und Gesamtzeit.

Angehaltenes Tool .NET Async

Untersuchen von Anwendungsereignissen

Die generische Ereignisanzeige zeigt die Aktivität Ihrer Anwendung in Form einer Liste von Ereignissen wie Laden von Modulen, Starten von Threads und die Systemkonfiguration an. Dadurch können Sie die Leistung Ihrer Anwendung direkt im Profiler von Visual Studio besser diagnostizieren. Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2).

Das Tool zeigt jedes Ereignis in einer Listenansicht. Spalten enthalten Informationen zu jedem Ereignis, wie z. B. Ereignisname, Zeitstempel und Prozess-ID.

Überwachung in der Ereignisanzeige

Instrumentierung

Das Instrumentierungstool ähnelt dem CPU-Auslastungstool, mit der Ausnahme, dass es die Instrumentierung anstelle des Samplings verwendet. Die Instrumentierungsmethode ist aufwändiger, aber Sie können genaue Aufrufzahlen abrufen (wie oft Ihre Funktionen aufgerufen wurden). Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2). Weitere Informationen finden Sie unter Instrumentierung.

Screenshot mit .NET-Instrumentierungsdaten

Überprüfen der Datei-E/A

Das Tool Datei-E/A hilft Ihnen zu verstehen, wie Sie Ihre Datei-E/A-Vorgänge optimieren können, um die Leistung Ihrer Apps zu verbessern. Wenn Sie versuchen, langsame Ladezeiten zu untersuchen und zu diagnostizieren, kann Ihnen das neue Tool Datei-E/A helfen zu verstehen, wie sich die E/A-Vorgänge auf die verbrauchte Zeit auswirken. Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Auswählen von „Debuggen“ > „Leistungs-Profiler“ (oder Drücken von ALT+F2).

Das Tool zeigt Lese- und Schreibvorgänge in Dateien in einer Listenansicht mit Registerkarten an.

Screenshot des beendeten Tools File IO

Analysieren der Datenbankleistung (.NET Core)

Bei .NET Core-Apps, die mit ADO.NET oder Entity Framework Core arbeiten, können Sie mit dem Tool Datenbank die Datenbankabfragen aufzeichnen, die Ihre Anwendung während einer Diagnosesitzung durchführt. Sie können anschließend Informationen zu einzelnen Abfragen analysieren, um Möglichkeiten zur Verbesserung der Leistung Ihrer App zu finden. Dieses Tool ist im Leistungs-Profiler verfügbar. Öffnen Sie den Leistungs-Profiler durch Wählen von Debuggen>Leistungs-Profiler (oder drücken Sie ALT+F2).

Das Tool zeigt jede Abfrage in einer Listenansicht. Es werden Informationen wie die Startzeit und Dauer der Abfrage angezeigt.

Speicherbelegung

Visualisieren von .NET-Indikatoren (.NET Core)

Ab Visual Studio 2019 Version 16.7 können Sie das Tool .NET-Indikatoren in Visual Studio verwenden, um Leistungsindikatoren visuell darzustellen. Sie können mit dotnet-Indikatoren erstellte Indikatoren visualisieren. Dotnet-Indikatoren unterstützen viele Indikatoren, wie z. B. CPU-Auslastung und Garbage Collector-Heapgröße.

Das Tool zeigt Livewerte für jeden Indikator in einer Listenansicht an.

Erfassung des .NET-Leistungsindikatortools

Analysieren des Ressourcenverbrauchs (XAML)

In XAML-Apps, z.B. Windows Desktop WPF-Apps und UWP-Apps, können Sie mit der Anwendungszeitachse den Ressourcenverbrauch analysieren. Sie können analysieren, wie viel Zeit Ihre Anwendung zum Vorbereiten von Benutzeroberflächenframes (Layout und Render), von Netzwerk- und Datenträgeranforderungen sowie in Szenarios wie Starten von Anwendungen, Laden von Seiten und Ändern von Fenstergrößen benötigt. Wählen Sie die Anwendungszeitachse im Leistungsprofiler aus und anschließend Starten, um das Tool zu verwenden. Navigieren Sie in Ihrer App zum Szenario mit einem vermuteten Ressourcenverbrauch-Problem, und wählen Sie anschließend Auflistung beenden zum Generieren des Berichts aus.

Geringe Framerates im Diagramm Visueller Durchsatz entsprechen möglicherweise visuellen Problemen, die Sie beim Ausführen der App sehen. Auf ähnliche Weise können hohe Zahlen des Diagramms Auslastung des UI-Thread Problemen mit der Reaktionsfähigkeit der Benutzeroberfläche entsprechen. Im Bericht können Sie den Zeitraum mit einem vermuteten Leistungsproblem auswählen, und anschließend die detaillierten UI-Threadaktivitäten in der Zeitachsendetailansicht (unten) überprüfen.

Profilerstellungstool für die Anwendungszeitachse

Profilerstellungstool für die Anwendungszeitachse

In der Zeitachsendetailansicht finden Sie Informationen wie den Typ der Aktivität (oder das beteiligte Benutzeroberflächenelement) sowie die Dauer der Aktivität. In der Abbildung benötigt beispielsweise ein Layout-Ereignis für ein Grid-Steuerelement 57,53 ms.

Weitere Informationen finden Sie unter Anwendungszeitachse.

Überprüfen der UI-Leistung und Barrierefreiheitsereignisse (UWP)

In Ihren UWP-Apps können Sie die Analyse der Benutzeroberfläche im Fenster Diagnosetools aktivieren. Das Tool sucht nach gemeinsamen Leistungs- oder Barrierefreiheitsproblemen, und zeigt sie in der Ansicht Ereignisse an, während Sie debuggen. Die Ereignisbeschreibungen bieten Informationen zur Problembehebung.

Anzeigen der Ereignisse der Benutzeroberflächenanalyse in den Diagnosetools

Anzeigen der Ereignisse der Benutzeroberflächenanalyse in den Diagnosetools

Analysieren der GPU-Nutzung (Direct3D)

In Direct3D-Apps (Direct3D-Komponenten müssen in C++ vorhanden sein) können Sie Aktivitäten auf der GPU überprüfen und Leistungsprobleme analysieren. Weitere Informationen erhalten Sie unter GPU-Nutzung. Wählen Sie die GPU-Nutzung im Leistungsprofiler und anschließend Starten aus, um das Tool zu verwenden. Durchlaufen Sie in Ihrer Anwendung das Szenario, für das Sie ein Profil erstellen wollen, und wählen Sie anschließend Auflistung beenden, um einen Bericht zu generieren.

Wenn Sie einen Zeitraum im Diagramm und Details anzeigen auswählen, wird eine detaillierte Ansicht wird im unteren Bereich angezeigt. In der Detailansicht können Sie überprüfen, wie viel Aktivität auf jeder CPU und GPU vorhanden ist. Wählen Sie Ereignisse im untersten Bereich aus, um Popups in der Zeitachse aufzurufen. Wählen Sie z.B. das Vorhanden-Ereignis aus, um die Vorhanden-Aufruf-Popups anzuzeigen. (Die hellgrauen vertikalen VSync-Linien können als Verweis verwendet werden, um zu verstehen, ob bestimmte Present-Aufrufe verpasste VSync haben. Es muss zwischen allen zwei VSyncs einen Present-Aufruf geben, damit die App stetig 60 FPS erreicht.)

Profilerstellungstool „GPU-Nutzung“

Profilerstellungstool „GPU-Nutzung“

Die Diagramme können auch bestimmen, ob es CPU-gebundene oder GPU-gebundene Leistungsengpässe gibt.

Analysieren der Leistung (Legacytools)

In Visual Studio 2019 wurden der Legacy-Leistungs-Explorer und die zugehörigen Profilerstellungstools wie der Leistungs-Assistent in den Leistungs-Profiler eingefügt, den Sie über Debuggen>Leistungs-Profiler öffnen können. Welche Diagnosetools im Leistungs-Profiler verfügbar sind, hängt von dem ausgewählten Ziel und dem aktuell geöffneten Startprojekt ab. Das CPU-Auslastungstool stellt die Funktion zur Stichprobenentnahme bereit, die zuvor über den Leistungs-Assistent verfügbar war. Das Instrumentierungstool bietet die instrumentierte Profilerstellungsfunktion (für präzise Aufrufanzahlen und -zeiten), die zuvor im Leistungs-Assistent verfügbar war. Außerdem sind weitere Arbeitsspeichertools im Leistungs-Profiler verfügbar.

Tool „Leistungs-Explorer“

Siehe auch