Optimalisatie van WinUI 3-prestaties

In dit onderwerp wordt beschreven hoe u hulpprogramma's voor prestatiebewaking gebruikt vanuit de Windows Performance Toolkit om uitgebreide prestatieprofielen voor WinUI-toepassingen te produceren.

Hoe gebruik ik de Windows Performance Recorder om WinUI-apps te bewaken?

De Windows Performance Recorder (WPR) kan worden gebruikt om gedetailleerde ETW-opnamen (Event Tracing for Windows) te maken van systeem- en toepassingsgedrag en resourcegebruik op basis van ingebouwde profielen. Deze ETW-opnamen kunnen vervolgens worden verwerkt door de Windows Performance Analyzer (WPA) om een set grafieken en tabellen te produceren voor eenvoudiger gebruik en diepgaande analyse van CPU-gebruik, energieproblemen, slechte systeem- of toepassingsprestaties en andere prestatieproblemen.

Opmerking

Hoewel er zowel GUI- als opdrachtregelversies van de WPR zijn, verwijst dit onderwerp alleen naar de GUI-versie (zie Inleiding tot WPR voor meer informatie over beide versies).

WPR-profielen

WPR-profielen worden gebruikt om informatie te verzamelen over verschillende aspecten en gedrag van uw app.

In de volgende afbeelding wordt het venster Windows Performance Recorder weergegeven met het profiel CPU-gebruik (CPU-gebruik voor elke CPU op het systeem) en het profiel XAML-activiteit (gebeurtenissen van XAML-gerelateerde providers, zoals WinUI) geselecteerd.

Schermopname van de Windows Performance Recorder met CPU-gebruik en XAML-activiteitsprofielen geselecteerd.

Hoe gebruik ik de Windows Performance Analyzer met WinUI-apps?

WinUI is een declaratieve, bewaarde-modus-API waarin de app een structuur van UIElements beschrijft en WinUI indeling uitvoert en weergeeft. Dit wordt gedaan op de UI-thread in batches met de naam 'frames', die snel moeten worden voltooid, in het ideale geval binnen één vernieuwingsinterval van de weergave. Wanneer frames lang duren, worden niet alleen updates naar de weergave vertraagd, maar wordt ook voorkomen dat de UI-draad invoer verwerkt. Trage frames zijn niet de enige oorzaak van problemen met reactievermogen, maar wel een van de meest voorkomende.

De invoegtoepassing 'XAML Frame Analysis' installeren

WinUI registreert ETW-gebeurtenissen die het begin en einde van elk frame volgen (weergegeven in de volgende schermopname van de tabel WPA "Generic Events"). Omdat de duur van elk frame echter handmatig moet worden berekend, is het moeilijk om langzame frames te identificeren.

Schermopname van Windows Performance Analyzer met de tabel Algemene gebeurtenissen met een reeks frame-starts en -stops.

Om dit probleem op te lossen, wordt een nieuwe invoegtoepassing voor XAML Frame Analysis opgenomen in de Windows Assessment Toolkit (ADK) 10.1.26100.1 en hoger. In deze tabel wordt de duur van elk frame berekend en weergegeven (samen met andere tijdrovende bewerkingen).

Opmerking

De tabel XAML Frame Analysis vereist Windows Performance Analyzer (WPA) van Windows ADK 10.1.26100.1 of hoger. De versie van WPR die wordt gebruikt om de tracering te nemen, maakt niet uit.

Zodra de ADK is geïnstalleerd, moet de tabel 'XAML Frame Analysis' worden ingeschakeld door het configuratiebestand 'perfcore.ini' te bewerken in de WPA-map (meestal C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit). Hiervoor sluit u alle geopende exemplaren van WPA, opent u 'perfcore.ini' in een teksteditor, voegt u toe perf_xaml.dll aan de lijst met dll's en slaat u het bestand op en sluit u het. Start WPA opnieuw op, waarin nu de grafiek 'XAML Frame Analysis' onder aan de sectie Systeemactiviteit wordt weergegeven.

Schermopname van Windows Performance Analyzer met de tabel XAML Frame Analysis onderaan de sectie Systeemactiviteit.

De invoegtoepassing 'XAML Frame Analysis' gebruiken

De Xaml-frameanalyse ondersteunt twee weergaven (beide weergaven tonen dezelfde kolommen):

  • "Interessante Xaml-frames" (standaard): toont WinUI-frames op basis van heuristieken die waarschijnlijk reactieproblemen veroorzaken. Deze komen overeen met regio's die beginnen met bewerkingen zoals WinUI-initialisatie, framenavigatie of flyoutweergave, en stoppen met het einde van het volgende frame. Deze scenario's omvatten doorgaans uitgebreide wijzigingen in de UIElement-structuur en zijn de meest vatbaar voor prestatieproblemen.
  • "Alle Xaml Info" - Toont alle WinUI-frames van alle processen die in de trace zijn gevonden. Voor bewerkingen zoals een frame of een indelingspas berekent de invoegtoepassing automatisch en wordt de duur weergegeven op basis van de gebeurtenissen starten en stoppen.

In de volgende schermopname ziet u hoe u kunt schakelen tussen Xaml Frame Analysis-weergaven.

Schermopname van Windows Performance Analyzer met de weergavekiezers voor de tabel Xaml Frame Analysis.

Beide Xaml Frame Analysis-weergaven bevatten de volgende kolommen:

Titel Waarde
Verwerken Procesnaam en -id
Thread-id Thread-id
Typ Beschrijft de gebeurtenis die overeenkomt met de rij. Mogelijke waarden zijn onder andere:
  • WXM::InitializeForCurrentThread - Een aanroep naar WindowsXamlManager.InitializeForCurrentThread. Initialiseert WinUI op de thread.
  • DWXS::Initialize - Een aanroep naar DesktopWindowXamlSource.Initialize. Initialiseert een WinUI-eiland.
  • Frame - Een frame op de UI-thread. Hiermee wordt de indeling uitgevoerd en worden wijzigingen in de structuur weergegeven sinds het vorige frame.
  • Een grafisch apparaat maken : maak een D3D- en een D2D-apparaat voor WinUI. Vindt plaats op een achtergrondthread.
  • UpdateLayout : een indelingspass voor de ui-thread. Treedt op als onderdeel van een frame, maar kan ook worden geactiveerd door de app via UIElement.UpdateLayout.
  • Frame::Navigeren - WinUI genereert het Frame.Navigating-evenement.
  • Frame::Navigated - WinUI verhoogt de gebeurtenis Frame.Navigated .
  • Hwnd Focus : de actieve hwnd is gewijzigd.
  • Interessegebied : een regio die door de invoegtoepassing wordt berekend voor interessante scenario's. Begint na gebeurtenissen zoals WinUI-initialisatie, framenavigatie en menu's openen. Stopt aan het einde van het volgende frame.
IsInteressant Of de rij als interessant wordt beschouwd. Alleen interessante rijen worden weergegeven in de weergave Interessante Xaml-frames.
Duur (ms) De duur van de rij. Berekend vanaf start- en stopgebeurtenissen.
Gewicht (ms) De werkelijke CPU-uitvoeringstijd die overeenkomt met de duur.
Starten (s) De tijd van de startgebeurtenis
Stoppen (s) De tijd van de Stop-gebeurtenis

Kolommen kunnen worden gesorteerd op type of duur om potentiële problemen te identificeren, zoals de duurste, langste duurframes in de trace (zie de volgende afbeelding). U kunt ook inzoomen op specifieke rijen om de dure bewerkingen en mogelijke optimalisaties te identificeren.

Schermopname van de Windows Performance Analyzer met de tabel Alle XAML-info, gesorteerd op Duur (ms).