Freigeben über


Analysieren der Leistung mithilfe der CPU-Profilerstellung im Leistungs-Profiler (C#, Visual Basic, C++, F#)

Eine gute Möglichkeit zur Untersuchung von Leistungsproblemen in Ihrer Anwendung ist die Untersuchung der CPU-Auslastung mit einem CPU-Profiler. Das Visual Studio-Leistungstool CPU-Auslastung zeigt die aktive Berechnungszeit der CPU und den Prozentsatz an, der für die Ausführung von Code in C++, C#/Visual Basic aufgewendet wurde.

Das CPU-Auslastungstool kann Ihnen bei Folgendem helfen:

  • Diagnostizieren einer Verlangsamung oder eines Hängenbleibens eines Prozesses in der Codebasis Ihres Teams. Das Tool kann Ihnen helfen, ein Problem mit dem Produktionscode Ihres Teams zu diagnostizieren. Es stellt automatisch Erkenntnisse und verschiedene Ansichten Ihrer Daten bereit, sodass Sie Leistungsprobleme analysieren und diagnostizieren können.

  • Identifizieren von Leistungsproblemen in DevOps-Szenarien Das Tool kann Sie beispielsweise unterstützen, wenn Kunden melden, dass einige Anforderungen oder Bestellungen während Spitzenzeiten nicht bei der Einzelhandelswebsite ankommen. Die Probleme liegen häufig bei der Produktion, und es ist schwierig, zu diesem Zeitpunkt einen Debugprozess durchzuführen. Dieses Tool kann Ihnen aber dabei helfen, genügend Informationen und Beweise zu diesem Problem zu erfassen. Nach dem Erfassen einer Ablaufverfolgungsdatei kann die Analyse Ihnen schnell helfen, potenzielle Ursachen zu verstehen und Vorschläge im Kontext Ihres Codes zu geben, damit Sie die nächsten Schritte ausführen können, um das Problem zu beheben.

  • Prüfen auf eine hohe CPU-Auslastung Wenn das Latenzproblem nicht innerhalb einer API-Anforderung auftritt, können Sie das Tool „CPU-Auslastung“ verwenden, um auf eine hohe CPU-Auslastung und andere verwandte Problemen zu prüfen. Das CPU-Auslastungstool kann Ihnen helfen, Engpässe zu identifizieren, um Optimierungsmöglichkeiten einzugrenzen.

Das CPU-Nutzungstool ist sowohl für lokale Ablaufverfolgungssitzungen als auch für die Produktion hilfreich. Sie können das Tool „CPU-Auslastung“ verwenden, indem Sie die Tastaturkombination Alt+F2 verwenden und dann CPU-Auslastung auswählen, oder indem Sie eine Ablaufverfolgung öffnen, die bereits über Tools wie dotnet-trace oder dotnet-monitor erfasst wurde. (Für .NET-Produktionscode würden Sie so am wahrscheinlichsten Ablaufverfolgungen erfassen.)

Sie können das Tool „CPU-Auslastung“ für ein geöffnetes Visual Studio-Projekt, eine installierte Microsoft Store-App oder angefügt an eine ausgeführte App oder einen ausgeführten Prozess ausführen. Sie können das Tool für die CPU-Auslastung mit oder ohne Debuggen ausführen. Weitere Informationen finden Sie unter Ausführen von Profilerstellungstools mit oder ohne Debugger.

Die folgenden Anweisungen zeigen, wie Sie das Tool für die CPU-Auslastung ohne den Debugger mit dem Visual Studio-Leistungsprofiler verwenden. In den Beispielen wird ein Releasebuild verwendet, der auf einem lokalen Computer erstellt wurde. Releasebuilds bieten die beste Ansicht der tatsächlichen App-Leistung. Eine Anleitung zur Verbesserung der Leistung mithilfe des Tools „CPU-Auslastung“ finden Sie unter Fallstudie: Leitfaden für Anfänger zum Optimieren von Code.

In der Regel repliziert der lokale Computer die Ausführung der installierten App am besten. Führen Sie die App direkt auf dem Gerät und nicht über eine Remotedesktopverbindung aus, um Daten von einem Remotegerät zu sammeln.

Sammeln von CPU-Auslastungsdaten

  1. Legen Sie im Visual Studio-Projekt die Konfiguration der Projektmappe auf Release fest, und wählen Sie als Bereitstellungsziel Lokaler Windows-Debugger (oder Lokaler Computer) aus.

    Screenshot der Auswahl von Release und lokalem Computer

    Screenshot der Auswahl von Release und lokalem Computer

  2. Wählen Sie Debuggen>Leistungsprofiler aus.

  3. Wählen Sie unter Verfügbare Tools die Option CPU-Auslastung und dann Starten aus.

    Screenshot der Auswahl von CPU-Auslastung

    Screenshot der Auswahl von CPU-Auslastung

    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

    Weitere Informationen zur Optimierung des Tools finden Sie unter Optimieren der Profilereinstellungen.

  4. Nach dem Start der App beginnt die Diagnosesitzung und zeigt Daten zur CPU-Auslastung an. Wenn Sie mit dem Sammeln der Daten fertig sind, klicken Sie auf Sammlung beenden.

    Screenshot des Beendens der Datensammlung zur CPU-Auslastung

    Screenshot des Beendens der Datensammlung zur CPU-Auslastung

    Das CPU-Auslastungstool analysiert die Daten und zeigt den Bericht an. Wenn Probleme beim Sammeln oder Anzeigen von Daten haben, lesen Sie Behandeln von Profilerstellungsfehlern und Beheben von Problemen.

    Screenshot des Berichts zur CPU-Auslastung

    Screenshot des Berichts zur CPU-Auslastung

    Verwenden Sie die Dropdownliste Filter, um das Anzeigen von Threads zu aktivieren bzw. deaktivieren. Verwenden Sie das Feld Suchen, um nach einem bestimmten Thread oder Knoten zu suchen.

Spalten mit CPU-Auslastungsdaten

Name Beschreibung
CPU gesamt [Einheit, %] Gesamt % Datengleichung

Die Millisekunden der CPU-Zeit und der CPU-Prozentsatz, der von Aufrufen der Funktion und von Funktionen, die von der Funktion aufgerufen werden, im ausgewählten Zeitbereich verwendet wird. Dies unterscheidet sich vom Zeitachsendiagramm CPU-Auslastung, das die gesamte CPU-Aktivität in einem Zeitbereich mit der insgesamt verfügbaren CPU vergleicht.
Eigen-CPU [Einheit, %] Eigen % Gleichung

Die CPU-Zeit in Millisekunden und der CPU-Prozentsatz, der von Aufrufen der Funktion im ausgewählten Zeitraum verbraucht wird, mit Ausnahme der von der Funktion aufgerufenen Funktionen.
Modul In einigen Ansichten wird die Spalte „Modul“ angezeigt, die den Namen des Moduls mit der Funktion enthält.

Analysieren von CPU-Erkenntnissen

Wenn ein Einblick im Abschnitt Top Insights auftaucht, verwenden Sie den angegebenen Link, um weitere Informationen über das identifizierte Problem zu erhalten. Wenn Sie Copilot verwenden, können Sie über die Schaltfläche Copilot fragen das Chat-Fenster von Copilot öffnen und Copilot wird Ihnen auf der Grundlage Ihres Codes und der festgestellten Probleme Vorschläge machen.

Weitere Informationen finden Sie unter CPU-Erkenntnisse.

Analysieren Sie die CPU-Auslastung

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

Der Bericht bietet verschiedene Ansichten der Diagnosedaten:

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

Klicken Sie zum Analysieren des Berichts auf Ausführlichen Bericht erstellen.

Der Bericht bietet verschiedene Ansichten der Diagnosedaten:

  • Aufrufer/Aufgerufener
  • Aufrufstruktur

In allen Ansichten (mit Ausnahme von Aufrufer/Angerufener) wird der Diagnosebericht nach Gesamt CPU 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 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. 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 des CPU-Nutzung-Tools

Wählen Sie zum Anzeigen der Aufrufstruktur im Bericht den übergeordneten Knoten aus. Daraufhin wird standardmäßig die Seite CPU-Auslastung in der Ansicht Aufrufer/Aufgerufener geöffnet. Wählen Sie in der Dropdownliste Aktuelle Ansicht die Option Aufrufstruktur aus.

Sie können auf die Schaltflächen Langsamsten Pfad erweitern und Langsamsten Pfad anzeigen klicken, um die Funktionsaufrufe anzuzeigen, die den höchsten Prozentsatz der CPU in der Ansicht der Aufrufstruktur verwenden.

Struktur der Aufrufstruktur

Screenshot der Struktur der Aufrufstruktur

Screenshot der Struktur der Aufrufstruktur

Image BESCHREIBUNG
Schritt 1 Der oberste Knoten im Aufrufbaum des CPU-Nutzung-Tools, der die Anwendung darstellt.
Schritt 2 In den meisten Apps ist bei deaktivierter Option Externen Code anzeigen der Knoten der zweiten Ebene ein [Externer Code] -Knoten. Der Knoten enthält den System- und Frameworkcode, der die App startet und beendet, die Benutzeroberfläche zeichnet, die Threadplanung steuert und der App weitere Dienste auf unterer Ebene bereitstellt.
Schritt 3 Die untergeordneten Elemente des Knotens der zweiten Ebene sind die Benutzercodemethoden und asynchronen Routinen, die vom System- und Frameworkcode der zweiten Ebene aufgerufen oder erstellt werden.
Schritt 4 Untergeordnete Knoten einer Methode enthalten nur Daten für die Aufrufe der übergeordneten Methode. Wenn Externen Code anzeigen deaktiviert ist, können App-Methoden auch den Knoten [Externer Code] enthalten.

Externer Code

System- und Frameworkfunktionen, die von Ihrem Code ausgeführt werden, werden als externer Code bezeichnet. Funktionen mit externem Code starten und beenden die App, zeichnen die Benutzeroberfläche, steuern das Threading und stellen der App weitere Dienste auf unterer Ebene bereit. In den meisten Fällen sind Sie nicht an externem Code interessiert, weshalb die Aufrufstruktur „CPU-Auslastung“ die externen Funktionen einer Benutzermethode in einem [Externer Aufruf] -Knoten sammelt.

Um die Aufrufpfade für externen Code anzuzeigen, heben Sie auf der Hauptübersichtsseite für den Bericht (rechter Bereich) die Auswahl von Nur eigenen Code anzeigen im Dropdown-Menü Einstellungen auf und wählen dann Anwenden aus. (Das Dropdown-Menü Einstellungen ist auf der Hauptseite der Berichtszusammenfassung verfügbar, nicht in den Detailansichten.)

Screenshot von

System- und Frameworkfunktionen, die von Ihrem Code ausgeführt werden, werden als externer Code bezeichnet. Funktionen mit externem Code starten und beenden die App, zeichnen die Benutzeroberfläche, steuern das Threading und stellen der App weitere Dienste auf unterer Ebene bereit. In den meisten Fällen sind Sie nicht an externem Code interessiert, weshalb die Aufrufstruktur „CPU-Auslastung“ die externen Funktionen einer Benutzermethode in einem [Externer Code] -Knoten sammelt.

Wählen Sie zum Anzeigen der Aufrufpfade von externem Code auf der Hauptseite des Diagnoseberichts (rechter Bereich) Externen Code anzeigen im Dropdownmenü Filtern und dann Anwenden aus. In der Ansicht Aufrufstruktur der Seite CPU-Auslastung werden dann die externen Codeaufrufe erweitert. (Die Dropdownliste Filter finden Sie auf der Hauptdiagnoseseite, nicht in den Detailansichten.)

Screenshot der Anzeige von externem Code

Wenn Sie Nur eigenen Code anzeigen deaktivieren, werden in der Ansicht Aufrufstruktur auf der Seite CPU-Auslastung die Aufrufe von externem Code erweitert.

Viele externe Codeaufrufketten sind tief verschachtelt, sodass die Breite der Kette die Anzeigebreite der Spalte Funktionsname überschreiten kann. Die Funktionsnamen werden dann wie in der folgenden Abbildung dargestellt angezeigt.

Screenshot von geschachteltem externem Code in der Aufrufstruktur

Viele externe Codeaufrufketten sind tief verschachtelt, sodass die Breite der Kette die Anzeigebreite der Spalte Funktionsname überschreiten kann. Die Funktionsnamen werden dann als ... angezeigt.

Screenshot von geschachteltem externem Code in der Aufrufstruktur

Verwenden Sie das Suchfeld, um einen Funktionsnamen zu finden. Zeigen Sie auf die ausgewählte Zeile, oder verwenden Sie die horizontale Scrollleiste, um die Daten anzuzeigen.

Screenshot der Suche nach geschachteltem externem Code

Screenshot der Suche nach geschachteltem externem Code

Asynchrone Funktionen in der Aufrufstruktur der CPU-Auslastung

Wenn der Compiler auf eine asynchrone Methode trifft, erstellt er eine versteckte Klasse zum Steuern der Ausführung der Methode. Vom Konzept her ist die Klasse ein Zustandsautomat. Die Klasse verfügt über vom Compiler generierte Funktionen, die die ursprünglichen Methoden sowie die Rückrufe, Planer und Iteratoren, die für deren Ausführung erforderlich sind, asynchron aufrufen. Wenn eine übergeordnete Methode die ursprüngliche Methode aufruft, entfernt der Compiler die Methode aus dem Ausführungskontext der übergeordneten Methode und führt die Methoden der ausgeblendeten Klasse im Kontext des System- und Frameworkcodes durch, der die Ausführung der App steuert. Die asynchronen Methoden werden oft, jedoch nicht immer, in einem oder mehreren verschiedenen Threads ausgeführt. Dieser Code wird in der Aufrufstruktur CPU-Auslastung als untergeordnete Elemente des Knotens [Externer Code] direkt unter dem obersten Knoten der Struktur angezeigt.

Im folgenden Beispiel sind die ersten beiden Knoten unter [Externer Code] die vom Compiler generierten Methoden der Zustandsautomatklasse. Der dritte Knoten ist der Aufruf der ursprünglichen Methode.

Screenshot eines asynchronen Knotens

Erweitern Sie die generierten Methoden, um zu sehen, was passiert:

Screenshot eines erweiterten asynchronen Knotens

Screenshot eines erweiterten asynchronen Knotens

  • MainPage::GetMaxNumberAsyncButton_Click verwaltet nur eine Liste der Aufgabenwerte, berechnet das Maximum der Ergebnisse und zeigt die Ausgabe an.

  • MainPage+<GetMaxNumberAsyncButton_Click>d__3::MoveNext zeigt die erforderliche Aktivität zum Planen und Starten der 48 Aufgaben, die den Aufruf von GetNumberAsyncumschließen.

  • MainPage::<GetNumberAsync>b__b zeigt die Aktivität der Aufgaben an, die GetNumber aufrufen.

Aufrufanzahl erfassen (.NET)

Wenn Sie die Aufrufanzahl in der Ansicht „Funktionen“ anzeigen möchten, können Sie die Einstellung aktivieren, bevor Sie den Profiler starten. Diese Einstellung wird für .NET-Projekttypen unterstützt und erfordert den Start des Prozesses unter dem Profiler. Das Anfügen-Szenario wird nicht unterstützt.

  1. Wählen Sie im Leistungs-Profiler das Symbol Einstellungen für CPU-Auslastung aus.

    Screenshot: Symbol „Einstellungen“ für die CPU-Auslastung

  2. Aktivieren Sie die Option Aufrufanzahl erfassen (nur .NET).

    Screenshot: Einstellungen für die CPU-Auslastung

  3. Erfassen Sie CPU-Auslastungsdaten.

  4. Öffnen Sie die Ansicht „Funktionen“, und stellen Sie dann sicher, dass die Sichtbarkeit der Spalte Aufrufanzahl festgelegt ist.

    Wenn die Spalte nicht angezeigt wird, klicken Sie mit der rechten Maustaste auf eine Spaltenüberschrift, um sichtbare Spalten auszuwählen.

    Screenshot: Daten zur Aufrufanzahl