WinUI 3-Leistungsoptimierung

In diesem Thema wird beschrieben, wie Sie Leistungsüberwachungstools aus dem Windows Performance Toolkit verwenden, um detaillierte Leistungsprofile für WinUI-Anwendungen zu erstellen.

Wie verwende ich den Windows Performance Recorder zum Überwachen von WinUI-Apps?

Der Windows Performance Recorder (WPR) kann verwendet werden, um detaillierte Event Tracing for Windows (ETW) Aufzeichnungen von System- und Anwendungsverhalten und Ressourcennutzung basierend auf integrierten Profilen zu erstellen. Diese ETW-Aufzeichnungen können dann vom Windows Performance Analyzer (WPA) verarbeitet werden, um eine Reihe von Diagrammen und Tabellen für einen einfacheren Verbrauch und eine detaillierte Analyse der CPU-Auslastung, Energieprobleme, schlechter System- oder Anwendungsleistung und anderer Leistungsprobleme zu erstellen.

Hinweis

Obwohl es sowohl GUI- als auch Befehlszeilenversionen des WPR gibt, bezieht sich dieses Thema nur auf die GUI-Version (weitere Details zu beiden Versionen finden Sie in Einführung in WPR ).

WPR-Profile

WPR-Profile werden verwendet, um Informationen zu verschiedenen Aspekten und Verhaltensweisen Ihrer App zu sammeln.

In der folgenden Abbildung wird das Fenster „Windows Performance Recorder“ mit dem ausgewählten Profil „CPU-Auslastung“ (CPU-Auslastung für jede CPU auf dem System) und dem „XAML-Aktivitätsprofil“ (Ereignisse von XAML-bezogenen Anbietern, z. B. WinUI) angezeigt.

Screenshot des Windows Performance Recorder mit ausgewählten CPU-Auslastungs- und XAML-Aktivitätsprofilen

Wie verwende ich den Windows Performance Analyzer mit WinUI-Apps?

WinUI ist eine deklarative Retained-Mode-API, bei der die App eine Struktur von UIElements beschreibt und WinUI das Layout ausführt und rendert. Dies erfolgt im UI-Thread in Batches namens „Frames“, die schnell abgeschlossen werden sollten, idealerweise innerhalb eines Aktualisierungsintervalls der Anzeige. Wenn Frames lange ausgeführt werden, verzögert dies nicht nur die Veröffentlichung von Aktualisierungen auf der Anzeige, sondern verhindert auch, dass der UI-Thread Eingaben verarbeitet. Langsame Frames sind zwar nicht der einzige Grund für Reaktionsfähigkeitsprobleme, aber einer der häufigsten.

Installieren des Plug-Ins „XAML-Frameanalyse“

WinUI protokolliert ETW-Ereignisse, die den Start und das Ende jedes Frames verfolgen (siehe den folgenden Screenshot der WPA-Tabelle „Generische Ereignisse“). Da die Dauer jedes Frames jedoch manuell berechnet werden muss, ist es schwierig, langsame Frame-Vorkommen zu identifizieren.

Screenshot von Windows Performance Analyzer mit der Tabelle „Generische Ereignisse“ mit einer Reihe von Framestarts und -stopps

Um dieses Problem zu beheben, ist ein neues Tabellen-Plug-In "XAML-Frameanalyse" im Windows Assessment Toolkit (ADK) 10.1.26100.1 und höher enthalten. Diese Tabelle berechnet und zeigt die Dauer jedes Frames (zusammen mit anderen zeitaufwendigen Vorgängen) an.

Hinweis

Die Tabelle "XAML-Frame-Analyse" erfordert Windows Performance Analyzer (WPA) aus Windows ADK 10.1.26100.1 oder eine neuere Version. Die Version von WPR, die für die Ablaufverfolgung verwendet wird, spielt keine Rolle.

Nach der Installation des ADK muss die Tabelle "XAML-Frameanalyse" aktiviert werden, indem Sie die Konfigurationsdatei "perfcore.ini" im WPA-Ordner bearbeiten (in der Regel C:\Programme (x86)\Windows Kits\10\Windows Performance Toolkit). Schließen Sie dazu alle geöffneten Instanzen von WPA, öffnen Sie „perfcore.ini“ in einem Text-Editor, fügen Sie perf_xaml.dll der Liste der DLL-Dateien hinzu, speichern und schließen Sie die Datei. Starten Sie WPA neu, wodurch nun das Diagramm „XAML-Frameanalyse“ unten im Abschnitt „Systemaktivität“ angezeigt werden sollte.

Screenshot des Windows Performance Analyzer mit der Tabelle „XAML-Frameanalyse“ unten im Abschnitt „Systemaktivität“

Verwenden des Plug-Ins „XAML-Frameanalyse“

Die XAML-Frameanalyse unterstützt zwei Ansichten (beide Ansichten zeigen die gleichen Spalten):

  • „Interessante XAML-Frames“ (Standard) – Zeigt WinUI-Frames basierend auf Heuristiken an, die diejenigen identifizieren, die höchstwahrscheinlich Probleme mit der Reaktionsfähigkeit verursachen. Diese entsprechen Regionen, die mit Vorgängen wie WinUI-Initialisierung, Frame-Navigation oder Flyout-Anzeige beginnen und mit dem Ende des nächsten Frames enden. Diese Szenarien umfassen in der Regel umfangreiche Änderungen an der UIElement-Struktur und sind am anfälligsten für Leistungsprobleme.
  • "Alle Xaml-Informationen" – Zeigt alle WinUI-Frames aus allen Prozessen an, die im Tracing gefunden wurden. Für Vorgänge wie einen Frame oder einen Layoutdurchlauf berechnet das Plug-In automatisch die Dauer basierend auf den Start- und Stoppereignissen und zeigt sie an.

Der folgende Screenshot zeigt, wie Sie zwischen XAML-Frameanalyseansichten wechseln.

Screenshot des Windows Performance Analyzer mit den Ansichtsmarkierern für die Xaml-Frameanalysetabelle.

Beide XAML-Frame-Analyseansichten enthalten die folgenden Spalten:

Title Wert
Prozess Prozessname und ID
Thread-ID Thread-ID
Typ Beschreibt das Ereignis, das der Zeile entspricht. Mögliche Werte sind:
  • WXM::InitializeForCurrentThread – Ein Aufruf von WindowsXamlManager.InitializeForCurrentThread. Initialisiert WinUI im Thread
  • DWXS::Initialize – Ein Aufruf von DesktopWindowXamlSource.Initialize. Initialisiert eine WinUI-Insel.
  • Frame – Ein Frame im UI-Thread. Startet das Layout-Verfahren und rendert die seit dem vorherigen Frame an der Struktur vorgenommenen Änderungen.
  • Erstellen eines Grafikgeräts – Erstellen eines D3D- und ein D2D-Geräts für WinUI. Tritt in einem Hintergrundthread auf.
  • UpdateLayout – Ein Layoutdurchlauf für den UI-Thread. Tritt als Teil eines Frames auf, kann aber auch durch die App über UIElement.UpdateLayout ausgelöst werden.
  • Frame::Navigation – WinUI löst das Frame.Navigating-Ereignis aus.
  • Frame::Navigated – WinUI löst das Frame.Navigated-Ereignis aus.
  • Hwnd Focus – Der aktive hwnd hat sich geändert.
  • Region of Interest – Ein Bereich, der vom Plug-In für interessante Szenarien berechnet wird. Beginnt nach Ereignissen wie WinUI-Initialisierung, Framenavigation und Öffnen von Menüs. Stoppt am Ende des nächsten Frames.
IstInteressant Angabe, ob die Zeile als interessant betrachtet wird. Nur interessante Zeilen werden in der Ansicht „Interessante XAML-Frames“ angezeigt.
Dauer (ms) Die Dauer der Zeile. Berechnet aus Start- und Stoppereignissen.
Gewicht (ms) Die tatsächliche CPU-Ausführungszeit, die der Dauer entspricht.
Beginn (s) Der Zeitpunkt des Startereignisses
Stopp (s) Der Zeitpunkt des Stoppereignisses.

Spalten können nach Typ oder Dauer sortiert werden, um potenzielle Probleme zu identifizieren, z. B. die teuersten Frames mit der längsten Dauer in der Ablaufverfolgung (siehe folgende Abbildung). Sie können auch einen Drilldown zu bestimmten Zeilen durchführen, um die teuren Vorgänge und potenziellen Optimierungen zu identifizieren.

Screenshot des Windows Performance Analyzer mit der Tabelle „Alle XAML-Informationen“ sortiert nach Dauer (ms)