Compartilhar via


Otimização de desempenho de WinUI

Este tópico descreve como usar ferramentas de monitoramento de desempenho do Windows Performance Toolkit para gerar perfis de desempenho detalhados para aplicativos WinUI.

Como usar o Windows Performance Recorder para monitorar aplicativos WinUI?

O Windows Performance Recorder (WPR) pode ser usado para criar gravações detalhadas de Rastreamento de Eventos para Windows (RTW) do comportamento do sistema e do aplicativo e do uso de recursos com base em perfis internos. Essas gravações ETW podem ser processadas pelo Windows Performance Analyzer (WPA) para produzir um conjunto de gráficos e tabelas para facilitar o consumo e uma análise detalhada de uso da CPU, problemas de energia, baixo desempenho do sistema ou do aplicativo e outros problemas de desempenho.

Observação

Embora existam versões de GUI e de linha de comando do WPR, este tópico refere-se apenas à versão de GUI (consulte Introdução ao WPR para obter mais detalhes sobre as duas versões).

Perfis WPR

Os perfis de WPR são usados para coletar informações sobre vários aspectos e comportamentos do seu aplicativo.

Na imagem a seguir, a janela Windows Performance Recorder é mostrada com o perfil "Uso da CPU" (a utilização da CPU para cada CPU no sistema) e o perfil "Atividade XAML" (eventos de provedores relacionados a XAML, como WinUI) selecionados.

Captura de tela do Windows Performance Recorder com os perfis Uso da CPU e Atividade XAML selecionados.

Como usar o Windows Performance Analyzer com aplicativos WinUI?

WinUI é uma API de modo retido declarativa, em que o aplicativo descreve uma árvore de UIElements e o WinUI executa layout e renderiza-o. Isso é feito no thread da interface do usuário em lotes chamados "quadros", que devem ser concluídos rapidamente. O ideal é que seja dentro de um intervalo de atualização da exibição. Quando a execução dos quadros é longa, não apenas atrasa a exibição das atualizações na tela, mas também impede que o thread da interface do usuário de manipular a entrada. Quadros lentos, embora não sejam o único motivo para os problemas de capacidade de resposta, são um dos mais comuns.

Instalar o plug-in "Análise de Quadro XAML"

O WinUI registra em log os eventos ETW que rastreiam o início e a parada de cada quadro (mostrado na captura de tela a seguir da tabela "Eventos Genéricos" do WPA). No entanto, como a duração de cada quadro precisa ser calculada manualmente, é difícil identificar ocorrências de quadros lentos.

Captura de tela do Windows Performance Analyzer mostrando a tabela Eventos Genéricos com uma série de inícios e paradas de quadros.

Para resolver esse problema, um novo plug-in de tabela "Análise de Quadro XAML" está incluído na versão preliminar do Windows Assessment Toolkit (ADK), build 26020 e posterior. Essa tabela calcula e mostra a duração de cada quadro (juntamente com outras operações demoradas).

Observação

Embora apenas a versão preliminar de visualização do Windows Performance Analyzer (WPA) tenha a tabela "Análise de Quadro XAML", a versão do WPR usada para fazer o rastreamento não importa.

Depois que a versão preliminar do ADK for instalada, a tabela "Análise de Quadro XAML" deverá ser habilitada editando o arquivo de configuração "perfcore.ini" na pasta WPA (geralmente, C:\Arquivos de Programas (x86)\Windows Kits\10\Windows Performance Toolkit). Para fazer isso, feche todas as instâncias abertas do WPA, abra "perfcore.ini" em um editor de texto, adicione perf_xaml.dll à lista de dlls e salve e feche o arquivo. Reinicie o WPA, que agora deve mostrar o gráfico "Análise de Quadro XAML" na parte inferior da seção Atividade do Sistema.

Captura de tela do Windows Performance Analyzer mostrando a tabela Análise de Quadro XAML na parte inferior da seção Atividade do Sistema.

Usar o plug-in "Análise de Quadro XAML"

A Análise de Quadro XAML tem suporte para dois modos de exibição (ambos os modos de exibição mostram as mesmas colunas):

  • "Quadros Xaml Interessantes" (padrão) - mostra os quadros do WinUI com base na heurística que identifica aqueles com maior probabilidade de causar problemas de capacidade de resposta. Eles correspondem a regiões que começam com operações, como inicialização do WinUI, navegação de quadro ou exibição de submenu, e param com o fim do próximo quadro. Esses cenários geralmente envolvem grandes alterações na árvore UIElement e são os mais suscetíveis a problemas de desempenho.
  • "Todas as Informações de Xaml" - mostra todos os quadros do WinUI de todos os processos encontrados no rastreamento. Para operações, como um quadro ou um cálculo de layout, o plug-in calcula e exibe automaticamente as durações com base nos eventos Start e Stop.

A captura de tela a seguir destaca como alternar entre as exibições de Análise de Quadro XAML.

Captura de tela do Windows Performance Analyzer mostrando os seletores de exibição da tabela Análise de Quadro XAML.

Ambas as exibições de Análise de Quadro XAML incluem as seguintes colunas:

Título Valor
Processo Nome e ID do processo
ID do thread ID do thread
Tipo Descreve o evento correspondente à linha. Entre os valores possíveis estão:
  • WXM::InitializeForCurrentThread - uma chamada para WindowsXamlManager.InitializeForCurrentThread. Inicializa o WinUI no thread.
  • DWXS::Initialize - uma chamada para DesktopWindowXamlSource.Initialize. Inicializa uma ilha WinUI.
  • Frame - um quadro no thread da interface do usuário. Executa o layout e renderiza as alterações na árvore desde o quadro anterior.
  • Criar dispositivo gráfico - crie um dispositivo D3D e um D2D para WinUI. Ocorre em um thread em segundo plano.
  • UpdateLayout - um cálculo de layout no thread da interface do usuário. Ocorre como parte de um quadro, mas também pode ser disparado pelo aplicativo por meio de UIElement.UpdateLayout.
  • Frame::Navigating - o WinUI gera o evento Frame.Navigating.
  • Frame::Navigated - o WinUI gera o evento Frame.Navigated.
  • Foco do Hwnd - o hwnd ativo foi alterado.
  • Região de Interesse - uma região calculada pelo plug-in para cenários interessantes. Inicia depois de eventos como inicialização do WinUI, navegação de quadros e menus de abertura. Para no fim do próximo quadro.
ÉInteressante Se a linha é considerada interessante. Somente linhas interessantes são mostradas na exibição Quadros Xaml Interessantes.
Duração (ms) A duração da linha. Calculada a partir dos eventos Start e Stop.
Peso (ms) O tempo real de execução da CPU que corresponde à duração.
Início (s) O tempo do evento Start.
Parada (s) O tempo do evento Stop.

As colunas podem ser classificadas por Tipo ou Duração para ajudar a identificar possíveis problemas, como os quadros mais caros e de maior duração no rastreamento (veja a imagem a seguir). Você também pode detalhar linhas específicas para identificar as operações caras e as possíveis otimizações.

Captura de tela do Windows Performance Analyzer mostrando a tabela Todas as Informações de XAML, classificada por Duração (ms).