Einführung in Profilerstellungstools (C#, Visual Basic, C++, F#)
Tools zur Messung der Anwendungsleistung sind ein Muss für Entwickler*innen, die ihren Code optimieren und die Anwendungsleistung verbessern möchten. Visual Studio stellt verschiedene Tools zur Profilerstellung und Diagnose bereit, mit denen Sie die Speicher- und CPU-Auslastung und andere Probleme auf Anwendungsebene diagnostizieren können. 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. In diesem Artikel werfen wir einen kurzen Blick auf die gängigsten Profilerstellungstools.
Hilfe bei der Auswahl des richtigen Tools oder zum Anzeigen des Supports für Profilerstellungstools für verschiedene App-Typen finden Sie unter Welches Tool sollte ich verwenden? Ein Tutorial zum allgemeinen Ansatz zum Optimieren von Code mithilfe der Profilerstellungstools finden Sie unter Fallstudie: Leitfaden für Anfänger zum Optimieren von Code.
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).
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:
- CPU-Auslastung
- .NET-Objektzuordnung
- Speicherauslastung
- Instrumentation
- .NET Async-Tool
- Datei-E/A
- .NET-Indikatoren
- Datenbanktool
- GPU-Nutzung
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.
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.
Während Sie debuggen, können Sie das Diagnosetools-Fenster zum Analysieren der CPU, der Speicherauslastung sowie der .NET-Leistungsindikatoren verwenden, und Sie können Ereignisse anzeigen, die leistungsbezogene Informationen enthalten.
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.
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).
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.
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.
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.
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.
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.
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 trägt dazu dabei, Zuteilungsmuster und Anomalien in Ihrem .NET-Code zu ermitteln, 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.
Bei Auswahl eines der Pfeil-Links erhalten Sie eine differenzielle Ansicht des Heap (ein roter Pfeil zeigt eine zunehmende Objektanzahl (links) oder eine höhere Heapgröße (rechts)). 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.
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).
Instrumentierung
Das Instrumentierungstool ähnelt dem Tool „CPU-Auslastung“, nur dass es anstelle der CPU-Auslastung die genaue Anzahl der Aufrufe und die Gesamtbetrachtungszeit liefert. Das Instrumentierungstool verursacht einen höheren Mehraufwand als das Tool „CPU-Auslastung“. 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.
Ü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.
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.
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.
Hinweis
Wenn Sie über Visual Studio Enterprise verfügen, sehen Sie auch IntelliTrace-Ereignisse auf dieser Registerkarte.
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.
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.
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.
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.
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.
Anzeigen benutzerdefinierter Ereignisse in den Zeitachsendiagrammen
Sie können benutzerdefinierte Ereignisse, die als Symbole in den Zeitachsendiagrammen angezeigt werden (z. B. die CPU-Auslastung und Zeitachsendiagramme für die Arbeitsspeicherauslastung) programmgesteuert erstellen. Weitere Informationen finden Sie unter Hinzufügen von Benutzermarkierungen zur Zeitachse.
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.
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.
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.)
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.