WinUI 3-prestandaoptimering

Det här avsnittet beskriver hur du använder prestandaövervakningsverktyg från Windows Performance Toolkit för att skapa djupgående prestandaprofiler för WinUI-program.

Hur använder jag Windows Performance Recorder för att övervaka WinUI-appar?

Windows Performance Recorder (WPR) kan användas för att skapa detaljerade ETW-inspelningar (Event Tracing for Windows) för system- och programbeteende och resursanvändning baserat på inbyggda profiler. Dessa ETW-inspelningar kan sedan bearbetas av Windows Performance Analyzer (WPA) för att skapa en uppsättning grafer och tabeller för enklare förbrukning och djupgående analys av CPU-användning, energiproblem, dålig system- eller programprestanda och andra prestandaproblem.

Anmärkning

Även om det finns både GUI- och kommandoradsversioner av WPR refererar det här avsnittet endast till GUI-versionen (se Introduktion till WPR för mer information om båda versionerna).

WPR-profiler

WPR-profiler används för att samla in information om olika aspekter och beteenden i din app.

I följande bild visas fönstret Windows Performance Recorder med profilen "CPU-användning" (CPU-användning för varje processor i systemet) och profilen "XAML-aktivitet" (händelser från XAML-relaterade leverantörer, till exempel WinUI) valda.

Skärmbild av Windows Performance Recorder med cpu-användning och XAML-aktivitetsprofiler valda.

Hur använder jag Windows Performance Analyzer med WinUI-appar?

WinUI är ett deklarativt API för behållet läge där appen beskriver ett träd med UIElements och WinUI kör layout och renderar det. Detta görs på användargränssnittstråden i batchar som kallas "frames", som bör slutföras snabbt, helst inom ett uppdateringsintervall för skärmen. När bildrutorna körs länge fördröjs inte bara uppdateringar från att komma till visningen, utan förhindrar också att användargränssnittstråden hanterar indata. Även om långsamma ramar inte är den enda orsaken till responsivitetsproblem, är de en av de vanligaste.

Installera plugin-programmet "XAML Frame Analysis"

WinUI loggar ETW-händelser som spårar start och stopp för varje bildruta (visas i följande skärmbild av wpa-tabellen "Allmänna händelser"). Men eftersom varaktigheten för varje bildruta måste beräknas manuellt är det svårt att identifiera långsamma bildrutehändelser.

Skärmbild av Windows Performance Analyzer som visar tabellen Generiska händelser med en serie ramstarter och stopp.

För att lösa det här problemet ingår ett nytt plugin-program för XAML-ramanalys i Windows Assessment Toolkit (ADK) 10.1.26100.1 och senare. Den här tabellen beräknar och visar varaktigheten för varje bildruta (tillsammans med andra tidskrävande åtgärder).

Anmärkning

Tabellen "XAML Frame Analysis" kräver Windows Performance Analyzer (WPA) från Windows ADK 10.1.26100.1 eller senare. Vilken version av WPR som används för att ta spårningen spelar ingen roll.

När ADK har installerats måste tabellen "XAML Frame Analysis" aktiveras genom att redigera konfigurationsfilen "perfcore.ini" i WPA-mappen (vanligtvis C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit). Det gör du genom att stänga alla öppna instanser av WPA, öppna "perfcore.ini" i en textredigerare, lägga till perf_xaml.dll i listan över dlls och spara och stänga filen. Starta om WPA, som nu ska visa diagrammet "XAML Frame Analysis" längst ned i avsnittet Systemaktivitet.

Skärmbild av Windows Performance Analyzer som visar tabellen XAML-ramanalys längst ned i avsnittet Systemaktivitet.

Använda plugin-programmet "XAML Frame Analysis"

Xaml Frame Analysis stöder två vyer (båda vyerna visar samma kolumner):

  • "Intressanta Xaml-ramar" (standard) – Visar WinUI-ramar baserat på heuristik som identifierar de som mest sannolikt orsakar svarstider. Dessa motsvarar regioner som börjar med åtgärder som WinUI-initiering, ramnavigering eller utfällbara bildskärmar och slutar med slutet av nästa bildruta. Dessa scenarier omfattar vanligtvis omfattande ändringar i UIElement-trädet och är de mest mottagliga för prestandaproblem.
  • "All Xaml Info" – Visar alla WinUI-ramar från alla processer som finns i spårningen. För åtgärder som en ram eller ett layoutpass beräknar plugin-programmet automatiskt och visar varaktigheterna baserat på start- och stopphändelserna.

Följande skärmbild visar hur du växlar mellan Xaml Frame Analysis-vyer.

Skärmbild av Windows Performance Analyzer som visar visningsväljare för tabellen Xaml Frame Analysis.

Båda Xaml Frame Analysis-vyerna innehåller följande kolumner:

Titel Värde
Bearbeta Processnamn och ID
Tråd-ID Tråd-ID
Type Beskriver händelsen som motsvarar raden. Möjliga värden är:
  • WXM::InitializeForCurrentThread – ett anrop till WindowsXamlManager.InitializeForCurrentThread. Initierar WinUI i tråden.
  • DWXS::Initialize – Ett anrop till DesktopWindowXamlSource.Initialize. Initierar en WinUI island.
  • Ram – en ram i användargränssnittstråden. Kör layout och återger ändringar i trädet sedan föregående bildruta.
  • Skapa grafikenhet – Skapa en D3D och en D2D-enhet för WinUI. Inträffar i en bakgrundstråd.
  • UpdateLayout – ett layoutpass på användargränssnittstråden. Inträffar som en del av en ram, men kan också utlösas av appen via UIElement.UpdateLayout.
  • Frame::Navigate – WinUI genererar händelsen Frame.Navigate .
  • Frame::Navigated – WinUI höjer händelsen Frame.Navigated .
  • Hwnd Focus – Den aktiva hwnd har ändrats.
  • Intresseregion – en region som beräknas av plugin-programmet för intressanta scenarier. Startar efter händelser som WinUI-initiering, ramnavigering och öppna menyer. Stannar i slutet av nästa bildruta.
ÄrIntressant Om raden anses vara intressant. Endast intressanta rader visas i vyn för Intressanta Xaml-ramar.
Varaktighet (ms) Varaktigheten för raden. Beräknas från start- och stopphändelser.
Vikt (ms) Den faktiska CPU-exekveringstiden som motsvarar varaktigheten.
Starta (s) Tidpunkten för starthändelsen
Stoppa (s) Tidpunkten för stop-händelsen

Kolumner kan sorteras efter typ eller varaktighet för att identifiera potentiella problem, till exempel de dyraste, längsta varaktighetsramarna i spårningen (se följande bild). Du kan också öka detaljnivån i specifika rader för att identifiera de dyra åtgärderna och potentiella optimeringar.

Skärmbild av Windows Performance Analyzer som visar tabellen All XAML Info, sorterad efter Varaktighet (ms).