Partager via


Optimisation des performances WinUI

Cette rubrique décrit comment utiliser les outils de contrôle des performances de la boîte à outils Windows Performance Toolkit pour produire des profils de performances approfondis pour les applications WinUI.

Comment utiliser l’Enregistreur de Performances Windows pour surveiller les applications WinUI ?

L’enregistreur de performances Windows (WPR) peut être utilisé pour créer des enregistrements détaillés d’Event Tracing for Windows (ETW) du comportement du système et de l’application et de l’utilisation des ressources sur la base de profils intégrés. Ces enregistrements ETW peuvent ensuite être traités par le Windows Performance Analyzer (WPA) pour produire un ensemble de graphiques et de tableaux facilitant la consommation et l’analyse approfondie de l’utilisation du processeur, des problèmes d’alimentation, des mauvaises performances du système ou de l’application, et d’autres problèmes de performance.

Remarque

Bien qu’il existe des versions GUI et ligne de commande du WPR, cette rubrique ne concerne que la version GUI (voir Introduction au WPR pour plus de détails sur les deux versions).

Profils WPR

Les profils WPR sont utilisés pour collecter des informations sur divers aspects et comportements de votre application.

Dans l’image suivante, la fenêtre de l’Enregistreur de performances Windows est affichée avec le profil « Utilisation du processeur » (utilisation du processeur pour chaque unité centrale du système) et le profil « Activité XAML » (événements provenant de fournisseurs liés à XAML, tels que WinUI) sélectionnés.

Capture d’écran de l’Enregistreur de performances Windows avec les profils d’utilisation du processeur et d’activité XAML sélectionnés.

Comment utiliser l’Analyseur de Performances Windows avec les applications WinUI ?

WinUI est une API déclarative, en mode retained, dans laquelle l’application décrit une arborescence d’éléments UIE et WinUI exécute la mise en page et le rendu. L’analyse des performances de Windows s’effectue sur le thread de l’interface utilisateur, par lots appelés « trames », qui doivent s’achever rapidement, idéalement dans un intervalle de rafraîchissement de l’affichage. Lorsque les trames sont trop longues, non seulement les mises à jour sont retardées par rapport à l’affichage, mais le fil d’exécution de l’interface utilisateur ne peut pas traiter les entrées. Les trames lentes, bien qu’elles ne soient pas la seule raison des problèmes de réactivité, sont l’une des plus courantes.

Installez le plugin « XAML Frame Analysis ».

WinUI journalise les événements ETW qui tracent le début et la fin de chaque trame (comme le montre la capture d’écran suivante du tableau « Événements génériques » de WPA). Toutefois, étant donné que la durée de chaque image doit être calculée manuellement, il est difficile d’identifier les occurrences lentes d’images.

Capture d’écran de l’analyseur de performances Windows montrant le tableau des événements génériques avec une série de démarrages et d’arrêts de trames.

Pour résoudre ce problème, un nouveau plugin de tableau « XAML Frame Analysis » est inclus dans la préversion de Windows Assessment Toolkit (ADK), à partir de la build 26020. Ce tableau calcule et affiche la durée de chaque trame (ainsi que d’autres opérations fastidieuses).

Remarque

Bien que seule la version préversion de l’analyseur de performances Windows (WPA) dispose du tableau « XAML Frame Analysis », la version de WPR utilisée pour prendre la trace n’a pas d’importance.

Une fois la préversion de l’ADK installée, le tableau « XAML Frame Analysis » doit être activé en modifiant le fichier de configuration « perfcore.ini » dans le dossier WPA (généralement, C:\NProgram Files (x86)\NWindows Kits\NWindows Performance Toolkit). Pour ce faire, fermez toutes les instances ouvertes de WPA, ouvrez perfcore.ini dans un éditeur de texte, ajoutez perf_xaml.dll à la liste des dll, puis enregistrez et fermez le fichier. Redémarrez WPA, qui devrait maintenant afficher le graphique « XAML Frame Analysis » au bas de la section Activité du système.

Capture d’écran de l’analyseur de performances Windows montrant le tableau « XAML Frame Analysis » au bas de la section Activité du système.

Utiliser le plugin « XAML Frame Analysis »

Le module « XAML Frame Analysis » prend en charge deux vues (les deux vues affichent les mêmes colonnes) :

  • « Trames XAML intéressantes » (par défaut) – Affiche les trames WinUI en fonction d’une heuristique qui identifie celles qui sont les plus susceptibles de causer des problèmes de réactivité. Ces trames correspondent aux régions qui commencent par des opérations telles que l’initialisation de la WinUI, la navigation dans les trames ou l’affichage d’un flyout, et qui s’arrêtent à la fin de la trame suivante. Ces scénarios impliquent généralement des modifications importantes de l’arborescence des éléments UIE et sont les plus susceptibles d’entraîner des problèmes de performances.
  • « Toutes les informations sur XAML » – Affiche toutes les trames WinUI de tous les processus trouvés dans la trace. Pour les opérations de type trame ou passage de mise en page, le plugin calcule et affiche automatiquement les durées en fonction des événements Start et Stop.

La capture d’écran suivante montre comment passer d’une vue à l’autre de l’analyse des trames Xaml.

Capture d’écran de l’analyseur de performances Windows montrant les sélecteurs d’affichage pour le tableau d’analyse des trames Xaml.

Les deux vues de l’analyse des trames Xaml comprennent les colonnes suivantes :

Titre Valeur
Processus Nom et ID du processus
ID du thread ID du thread
Catégorie Décrit l’événement correspondant à la ligne. Valeurs possibles :
  • WXM::InitializeForCurrentThread – Un appel pour WindowsXamlManager.InitializeForCurrentThread. Initialise WinUI sur le thread.
  • DWXS::Initialize – Un appel pour DesktopWindowXamlSource.Initialize. Initialise un îlot WinUI.
  • Frame – Un cadre sur le thread de l’interface utilisateur. Exécute la mise en page et rend les modifications apportées à l’arbre depuis la trame précédente.
  • Créer un appareil graphique – Créez un appareil D3D et un appareil D2D pour WinUI. Se produit sur un fil d’exécution en arrière-plan.
  • UpdateLayout – Passage de la mise en page sur le thread de l’interface utilisateur. Se produit dans le cadre d’une image, mais peut également être déclenché par l’application via UIElement.UpdateLayout.
  • Frame::Navigating – WinUI déclenche l’événement Frame.Navigating.
  • Frame::Navigated – WinUI déclenche l’événement Frame.Navigated.
  • Hwnd Focus – Le hwnd actif a changé.
  • Région d’intérêt – Région calculée par le plugin pour les scénarios intéressants. Démarre après des événements comme l’initialisation de la WinUI, la navigation dans les trames et l’ouverture des menus. S’arrête à la fin de la trame suivante.
Intéressant Si la ligne est considérée comme intéressante. Seules les lignes intéressantes apparaissent dans la vue Trames Xaml intéressantes.
Durée (ms) Durée de la ligne. Calculée à partir des événements Start et Stop.
Poids (ms) Le temps d’exécution réel du processeur correspondant à la durée.
Start(s) L’heure de l’événement Start
Stop(s) L’heure de l’événement Stop

Les colonnes peuvent être triées par Type ou Durée pour aider à identifier les problèmes potentiels tels que les trames les plus coûteuses et les plus longues dans la trace (voir l’image suivante). Vous pouvez également explorer des lignes spécifiques pour identifier les opérations coûteuses et les optimisations potentielles.

Capture d’écran de l’analyseur de performances Windows montrant le tableau Toutes les informations XAML, triées par durée (ms).