Freigeben über


Sehen Sie sich zunächst Profilerstellungstools an (C#, Visual Basic, C++, F#)

Anwendungsleistungsmessungstools sind für Entwickler unerlässlich, die ihren Code optimieren und die Anwendungsleistung verbessern möchten. Visual Studio bietet eine Reihe von Profilerstellungs- und Diagnosetools, mit denen Sie Arbeitsspeicher 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 dabei helfen, fundierte Entscheidungen schnell zu treffen, indem sie eine visuelle Darstellung der Ausführungszeiten und der CPU-Auslastung für Ihre Anwendung bereitstellen. In diesem Artikel werfen wir einen schnellen Überblick über die am häufigsten verwendeten Profilerstellungstools.

Hilfe zum Auswählen des richtigen Tools oder zur Unterstützung des Profilerstellungstools für verschiedene App-Typen finden Sie unter Welches Tool sollte ich verwenden? Ein Lernprogramm, das einen allgemeinen Ansatz zur Optimierung von Code mithilfe der Profilerstellungstools zeigt, finden Sie in Fallstudie: Leitfaden für Anfänger zur Optimierung von Code.

Um die beste Erfahrung mit dieser Dokumentation zu erzielen, wählen Sie ihre bevorzugte Entwicklungssprache oder Laufzeit aus der Liste oben im Artikel aus.

Messen der Leistung in Release-Builds

Tools im Performance Profiler sollen Analysen für Release--Builds bereitstellen. Im Performance Profiler können Sie Diagnoseinformationen sammeln, während die App ausgeführt wird, und dann die gesammelten Informationen untersuchen, nachdem die App beendet wurde (eine Post-Mortem-Analyse).

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

Screenshot: Leistungs-Profiler.

Screenshot: Leistungs-Profiler.

Weitere Informationen zur Verwendung der Tools zur CPU-Auslastung oder Speicherauslastung im Leistungs-Profiler im Vergleich zu den im Debugger integrierten Tools finden Sie unter Ausführen von Profilerstellungstools für Release- oder Debugbuilds.

Die im Performance Profiler verfügbaren Tools umfassen:

Informationen zur Unterstützung des Profilerstellungstools für verschiedene App-Typen finden Sie unter Welches Tool sollte ich verwenden?.

In einigen Szenarien können Sie im Fenster mehrere Profilerstellungstoolsauswählen. Tools wie die CPU-Auslastung können ergänzende Daten bereitstellen, die Sie bei der Analyse verwenden können. Sie können auch den Befehlszeilenprofilierer verwenden, um Szenarien mit mehreren Profilerstellungstools zu ermöglichen.

Messen der Leistung beim Debuggen

Die Profilerstellungstools, auf die Sie während einer Debugsitzung zugreifen können, sind im Fenster "Diagnosetools" verfügbar. Das Fenster "Diagnosetools" wird automatisch angezeigt, es sei denn, Sie haben es deaktiviert. Klicken Sie zum Öffnen des Fensters auf Debuggen / Windows / Diagnosetools anzeigen (oder drücken Sie STRG + ALT + F2). Wenn das Fenster geöffnet ist, können Sie Tools auswählen, für die Sie Daten sammeln möchten.

Fenster Fenster „Diagnosetools“

Während Sie debuggen, können Sie die Diagnosetools Fenster verwenden, um CPU, Arbeitsspeicherauslastung, .NET-Leistungsindikatoren zu analysieren, und Sie können Ereignisse anzeigen, die leistungsbezogene Informationen anzeigen.

Fenster Fenster „Diagnosetools“

Während Sie debuggen, können Sie die Diagnosetools Fenster verwenden, um die CPU- und Arbeitsspeicherauslastung zu analysieren, und Sie können Ereignisse anzeigen, die leistungsbezogene Informationen anzeigen.

Zusammenfassung „Diagnosetools“

Zusammenfassungsansicht 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 Ansätzen finden Sie unter Ausführen von Profilerstellungstools für Release- oder Debugbuilds. Informationen zur Unterstützung des Profilerstellungstools für verschiedene App-Typen finden Sie unter Welches Tool sollte ich verwenden?.

Die im Fenster "Diagnosetools" oder während einer Debugsitzung verfügbaren Tools umfassen:

Tipp

Verwenden Sie "Relaunch", um die Startseite zu überspringen und automatisch mit den vorherigen Einstellungen zu starten, indem Sie Alt+F2 drücken oder auf Debug > Performance Profilerklicken.

Anmerkung

Windows 8 und höher wird benötigt, um Profiling-Tools mit dem Debugger auszuführen (Diagnosetools Fenster).

Analysieren der CPU-Auslastung

Das TOOL für die CPU-Auslastung ist ein guter Ausgangspunkt, um die Leistung Ihrer App zu analysieren. Sie erfahren mehr über CPU-Ressourcen, die Ihre App verbraucht. Sie können das in den Debugger integrierte CPU-Auslastungstool oder das Post-Mortem-CPU-Auslastungstool verwenden.

Öffnen Sie bei Verwendung des Debugger-integrierten CPU-Nutzungstools das Diagnosetoolfenster (wenn es geschlossen ist, wählen Sie Debuggen / Windows / Diagnosetools anzeigen). Öffnen Sie beim Debuggen die Ansicht Zusammenfassung, und wählen Sie Aufzeichnen des CPU-Profilsaus.

Aktivieren der CPU-Auslastung in den Diagnosetools

Aktivieren der CPU-Auslastung in den Diagnosetools

Eine Möglichkeit zum Verwenden des Tools besteht darin, zwei Haltepunkte in Ihrem Code festzulegen, eine am Anfang und eine am Ende der Funktion oder des Codebereichs, den Sie analysieren möchten. Überprüfen Sie die Profiling-Daten, wenn Sie am zweiten Haltepunkt angehalten haben.

In der Ansicht CPU-Auslastung wird eine Liste der Funktionen angezeigt, die nach Ausführungszeit sortiert sind, wobei die Funktion mit der längsten Ausführungszeit oben unter Top-Funktionenerscheint. Im Abschnitt Hot Path wird der Aufrufstapel für die Funktionen angezeigt, die die meisten CPU verwenden. Diese Listen können Ihnen helfen, Funktionen zu identifizieren, bei denen Leistungsengpässe auftreten.

Ansicht der CPU-Auslastung in den Diagnosetools

In der Ansicht CPU-Auslastung wird eine Liste der Funktionen angezeigt, die nach der längsten Ausführung sortiert sind, wobei sich die funktion mit der längsten Ausführung oben befindet. Dies kann Ihnen helfen, Funktionen zu identifizieren, bei denen Leistungsengpässe auftreten.

Ansicht „CPU-Auslastung“ in den Diagnosetools

Klicken Sie auf eine funktion, an der Sie interessiert sind, und Sie sehen eine detailliertere Anrufstruktur Ansicht, wobei 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). Anhand dieser Daten können Sie bewerten, ob es sich bei der Funktion selbst um einen Leistungsengpass handelt.

Tipp

Der Visual Studio-Profiler unterstützt sowohl das Sammeln als auch das Anzeigen von Traces. Der Profiler kann auch Traces anzeigen, die zuvor von anderen Tools wie dotnet-trace gesammelt wurden. Dotnet-Trace erzeugt Stichprobenergebnisse, keine instrumentierte Spur. Weitere Informationen finden Sie unter dotnet-trace.

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

Klicken Sie auf eine Funktion, die Sie interessiert, und Sie sehen eine detailliertere "Schmetterlingsansicht" mit drei Bereichen, mit der ausgewählten Funktion in der Mitte des Fensters, der aufrufenden Funktion auf der linken Seite und den 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. Anhand dieser Daten können Sie ermitteln, ob die Funktion selbst ein Leistungsengpass ist.

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

Analysieren der Speicherauslastung

Im Fenster Diagnosetools können Sie auch die Speicherauslastung in Ihrer App mithilfe des Tools Speicherauslastung auswerten. 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 entweder zwischen dem .NET Object Allocation Tool oder dem Speicherauslastung Tool wählen.

  • Mit dem tool .NET Object Allocation können Sie Zuordnungsmuster und Anomalien in Ihrem .NET-Code identifizieren und häufige Probleme mit der Garbage Collection identifizieren. Dieses Tool wird nur zur Nachbereitung ausgeführt. Sie können dieses Tool auf lokalen oder Remotecomputern ausführen.
  • Die Speicherauslastung Tool ist hilfreich beim Identifizieren von Speicherlecks, die in .NET-Apps in der Regel nicht üblich sind. 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.

Um die Speicherauslastung mit dem Tool Speicherauslastung zu analysieren, müssen Sie mindestens einen Speicherschnappschuss erstellen. Häufig besteht die beste Möglichkeit zum Analysieren des Speichers darin, zwei Momentaufnahmen zu erstellen; das erste Recht vor einem verdächtigen Speicherproblem und die zweite Momentaufnahme unmittelbar nach einem verdächtigen Speicherproblem. Anschließend können Sie einen Unterschied der beiden Momentaufnahmen anzeigen und genau sehen, was sich geändert hat. Die folgende Abbildung zeigt das Erstellen einer Momentaufnahme mit dem Debugger-integrierten Tool.

Eine Momentaufnahme in den Diagnosetools erstellen

Erstellen einer Momentaufnahme in den Diagnosetools

Wenn Sie auf einen der Pfeillinks klicken, erhalten Sie eine Differenzansicht des Heaps (ein roter Pfeil NACH OBEN für Zunahme der Speicherauslastung zeigt eine zunehmende Objektanzahl (links) oder eine höhere Heapgröße (rechts)). Wenn Sie auf den richtigen Link klicken, erhalten Sie eine differenzielle Heap-Ansicht, die nach den Objekten sortiert ist, die am meisten an Speichergröße zugenommen haben. Auf diese Weise können Sie Speicherprobleme lokalisieren. In der Abbildung unten sind die von ClassHandlersStore-Objekten verwendeten Bytes in der zweiten Momentaufnahme beispielsweise um 3.492 Bytes gestiegen.

Diagnosetools: Differenzansicht „Heap“

Diagnosetools: Differenzansicht „Heap“

Wenn Sie stattdessen auf den Link auf der linken Seite in der Ansicht Speicherauslastung klicken, wird die Heap-Ansicht nach Objektanzahl organisiert; die Objekte eines bestimmten Typs, die am meisten in ihrer Anzahl zugenommen haben, werden oben angezeigt (sortiert nach der Anzahl-Differenz--Spalte).

Instrumentierung

Das Instrumentierungstool ähnelt dem CPU-Auslastungstool, mit der Ausnahme, dass es genaue Anrufanzahl und Wanduhrzeit anstelle der CPU-Auslastung bereitstellt. Die Instrumentierungsmethode erfordert mehr Aufwand als das CPU-Auslastungstool. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance Profiler, indem Sie Debug>Performance Profiler (oder Alt + F2) auswählen. Weitere Informationen finden Sie unter Instrumentierung.

Screenshot mit .NET Instrumentationsdaten.

Überprüfen der Datei-E/A

Das Datei-E/A-Tool hilft Ihnen zu verstehen, wie Sie Ihre Datei-E/A-Vorgänge optimieren können, um die Leistung in Ihren Apps zu verbessern. Wenn Sie versuchen, langsame Ladezeiten zu untersuchen und zu diagnostizieren, kann Ihnen das neue Datei-E/A-Tool helfen, zu verstehen, wie sich die E/A-Vorgänge auf Ihre aufgewendete Zeit auswirken. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance Profiler, indem Sie "Debuggen" > Performance Profiler (oder ALT+F2) auswählen.

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

Screenshot des beendeten Tools File IO

Überprüfen der Leistung mithilfe von PerfTips

Häufig besteht die einfachste Möglichkeit zum Anzeigen von Leistungsinformationen darin, PerfTipszu verwenden. Mithilfe von PerfTips können Sie Leistungsinformationen anzeigen, während Sie mit Ihrem Code interagieren. Sie können Informationen wie die Dauer des Ereignisses überprüfen (gemessen von dem Zeitpunkt, an dem der Debugger zuletzt angehalten wurde oder wann die App gestartet wurde). Wenn Sie z. B. Code durchlaufen (F10, F11), zeigen PerfTips die Dauer der App-Laufzeit von dem vorherigen Schritt bis zum aktuellen Schritt an.

Screenshot: PerfTips.

Screenshot: PerfTips.

Sie können PerfTips verwenden, um zu untersuchen, wie lange es dauert, bis ein Codeblock ausgeführt wird, oder wie lange es dauert, bis eine einzelne Funktion abgeschlossen ist.

PerfTips zeigen 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.

Screenshot: Ansicht „Ereignisse“ in den Diagnosetools.

Screenshot: Ansicht „Ereignisse“ in den Diagnosetools.

Anmerkung

Wenn Sie über Visual Studio Enterprise verfügen, können Sie auch IntelliTrace-Ereignisse auf dieser Registerkarte anzeigen.

Analysieren von asynchronen Code (.NET)

Mit dem .NET Async-Tool können Sie die Leistung von asynchronem Code in Ihrer Anwendung analysieren. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance Profiler, indem Sie Debug>Performance Profiler (oder Alt + F2) auswählen.

Das Tool zeigt jeden asynchronen Vorgang in einer Listenansicht an. Sie können Informationen wie Startzeit, Endzeit und Gesamtzeit für einen asynchronen Vorgang anzeigen.

Angehaltenes Tool .NET Async

Dieses Tool wird für .NET Core- und .NET 5+-Apps unterstützt.

Analysieren von asynchronen Code (.NET)

Mit dem .NET Async-Tool können Sie die Leistung von asynchronem Code in Ihrer Anwendung analysieren. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance Profiler, indem Sie Debug>Performance Profiler (oder Alt + F2) auswählen.

Das Tool zeigt jeden asynchronen Vorgang in einer Listenansicht an. Sie können Informationen wie Startzeit, Endzeit und Gesamtzeit für einen asynchronen Vorgang anzeigen.

Angehaltenes Tool .NET Async

Dieses Tool wird für .NET Core- und .NET 5+-Apps unterstützt.

Analysieren der Datenbankleistung (.NET)

Für .NET Core- und .NET 5+-Apps, die ADO.NET oder Entity Framework Core verwenden, können Sie mit dem -Datenbanktool die Datenbankabfragen aufzeichnen, die Ihre Anwendung während einer Diagnosesitzung vorgibt. Anschließend können Sie Informationen zu einzelnen Abfragen analysieren, um Orte zu finden, an denen die Leistung Ihrer App verbessert werden kann. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance Profiler, indem Sie "Debug">"Performance Profiler" (oder "Alt + F2") auswählen.

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

Zuordnung

Visualisieren von .NET-Leistungsindikatoren (.NET)

Ab Visual Studio 2019, Version 16.7, können Sie das .NET Counters-Tool in Visual Studio verwenden, um Leistungsindikatoren zu visualisieren. 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 Zähler in einer Listenansicht an.

Erfassung des .NET-Leistungsindikatortools

Dieses Tool wird für .NET Core- und .NET 5+-Apps unterstützt.

Untersuchen von Anwendungsereignissen

Mit der generischen ereignisanzeige können Sie die Aktivität Ihrer Anwendung über eine Liste von Ereignissen wie Modulladevorgang, Threadstart und Systemkonfigurationen anzeigen, um die Leistung Ihrer Anwendung direkt im Visual Studio-Profiler besser zu diagnostizieren. Dieses Tool ist im Performance Profiler verfügbar. Öffnen Sie den Performance-Profiler, indem Sie Debug>Performance-Profiler (oder Alt + F2) auswählen.

Das Tool zeigt jedes Ereignis in einer Listenansicht an. Spalten enthalten Informationen zu den einzelnen Ereignissen, z. B. den Ereignisnamen, den Zeitstempel und die Prozess-ID.

Überwachung in der Ereignisanzeige

Anzeigen benutzerdefinierter Ereignisse in den Zeitachsendiagrammen

Sie können programmgesteuert benutzerdefinierte Ereignisse erstellen, die als Symbole in den Zeitachsendiagrammen angezeigt werden, z. B. die CPU-Auslastung und Zeitachsendiagramme für die Arbeitsspeicherauslastung. Weitere Informationen finden Sie unter Benutzer­markierungen zur Zeitachse hinzufügen.

Analysieren des Ressourcenverbrauchs (XAML)

In XAML-Apps wie Windows-Desktop-WPF-Apps und UWP-Apps können Sie den Ressourcenverbrauch mithilfe des Tools "Anwendungszeitachse" 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. Um das Tool zu verwenden, wählen Sie Anwendungszeitachse im Performance Profiler aus, und wählen Sie dann Startaus. 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 einen Zeitraum mit einem vermuteten Leistungsproblem auswählen und anschließend die detaillierten UI-Threadaktivitäten in der Detailansicht des zeitlichen Verlaufs (unterer Bereich) untersuchen.

Profilerstellungstool für die Anwendungszeitachse

Profilerstellungstool für die Anwendungszeitachse

In der Detailansicht "Zeitachse" finden Sie Informationen wie den Typ der Aktivität (oder das beteiligte UI-Element) zusammen mit der Dauer der Aktivität. In der Abbildung dauert beispielsweise ein Layout--Ereignis für ein Grid-Steuerelement 57,53 ms.

Weitere Informationen finden Sie unter Application Timeline.

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

In Ihren UWP-Apps können Sie UI-Analysis im Fenster Diagnose-Tools aktivieren. Das Tool sucht nach allgemeinen Leistungs- oder Barrierefreiheitsproblemen und zeigt diese in der Ansicht "Ereignisse" an, während Sie debuggen. Die Ereignisbeschreibungen enthalten Informationen, mit denen Probleme behoben werden können.

Anzeigen der Ereignisse der Benutzeroberflächenanalyse in den Diagnosetools

Anzeigen der Ereignisse der Benutzeroberflächenanalyse in den Diagnosetools

Analysieren der GPU-Verwendung (Direct3D)

In Direct3D-Apps (Direct3D-Komponenten müssen sich in C++ befindet), können Sie aktivitäten auf der GPU untersuchen und Leistungsprobleme analysieren. Weitere Informationen finden Sie unter GPU Usage. Um das Tool zu verwenden, wählen Sie GPU-Verwendung im Performance Profiler aus, und wählen Sie dann Startaus. 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 in den Diagrammen auswählen und Details anzeigenauswählen, wird im unteren Bereich eine detaillierte Ansicht angezeigt. In der detaillierten Ansicht können Sie untersuchen, wie viel Aktivität auf jeder CPU und GPU stattfindet. Wählen Sie Ereignisse im untersten Bereich aus, um Popups in der Zeitachse anzuzeigen. Wählen Sie z. B. das Vorhanden-Ereignis aus, um die Vorhanden-Aufruf-Popups anzuzeigen. (Die hellgrauen vertikalen VSync-Linien können als Referenz verwendet werden, um zu verstehen, ob bestimmte Present-Aufrufe den VSync verpasst haben. Es muss ein Present-Aufruf zwischen zwei VSyncs stattfinden, damit die App konstant 60 FPS erreicht.)

GPU-Verwendungsprofilerstellungstool

GPU-Verwendungsprofilerstellungstool

Sie können auch die Diagramme verwenden, um zu bestimmen, ob CPU-gebundene oder GPU-gebundene Leistungsengpässe vorhanden sind.

Leistungsanalyse (veraltete Tools)

In Visual Studio 2019 wurden der ältere Leistungs-Explorer und zugehörige Profilerstellungstools wie der Leistungs-Assistent in den Performance Profiler gefaltet, den Sie mit Debug>Performance Profileröffnen können. Im Performance Profiler hängen die verfügbaren Diagnosetools vom ausgewählten Ziel und dem aktuellen, geöffneten Startprojekt ab. Das Tool für die CPU-Auslastung bietet die Sampling-Funktion, die zuvor im Leistungs-Assistenten unterstützt wurde. Das Instrumentierungstool bietet die instrumentierte Profilerstellungsfunktion (für präzise Aufrufanzahlen und -zeiten), die zuvor im Leistungs-Assistent verfügbar war. Weitere Speichertools werden auch im Performance Profiler angezeigt.

Tool „Leistungs-Explorer“