Partager via


Optimisation des performances WinUI 3

Cette rubrique explique comment utiliser des outils d’analyse des performances à partir du Windows Performance Toolkit pour produire des profils de performances détaillés 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.

Note

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 le Windows Performance Analyzer 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. Cela se fait sur le thread de l'interface utilisateur par lots appelés « trames », qui doivent se terminer rapidement, de préférence dans un intervalle de rafraîchissement de l'écran. Lorsque les trames sont trop longues, non seulement les mises à jour prennent du retard pour atteindre l'affichage, mais le fil d’exécution de l’interface utilisateur est également empêché de traiter les entrées. Les trames lentes, même si elles ne sont pas la seule cause des problèmes de réactivité, sont un des problèmes les plus courants.

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ébut et fin de trames.

Pour résoudre ce problème, un nouveau plug-in de table « Analyse de frame XAML » est inclus dans la boîte à outils d’évaluation Windows Assessment Toolkit (ADK) 10.1.26100.1 et versions ultérieures. Ce tableau calcule et affiche la durée de chaque trame (ainsi que d’autres opérations fastidieuses).

Note

La table « Analyse de frame XAML » nécessite Windows Performance Analyzer (WPA) à partir de Windows ADK 10.1.26100.1 ou version ultérieure. La version de WPR utilisée pour effectuer la trace n’a pas d’importance.

Une fois l’ADK installé, la table « Analyse de frame XAML » doit être activée en modifiant le fichier de configuration «perfcore.ini» dans le dossier WPA (généralement, C :\Program Files (x86)\Windows Kits\10\Windows 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 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 cadres 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
Type 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 le cadre précédent.
  • Créer un appareil graphique – Créez un appareil D3D et un appareil D2D pour WinUI. Se produit sur un fil 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 rangée. Calculée à partir des événements Start et Stop.
Poids (ms) Le temps d’exécution réel du processeur correspondant à la durée.
Démarrer(s) L’heure de l’événement Start
Arrêt(s) L’heure de l’événement d'arrêt

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).