Optymalizacja wydajności winUI 3

W tym temacie opisano sposób używania narzędzi do monitorowania wydajności z zestawu narzędzi Windows Performance Toolkit do tworzenia szczegółowych profilów wydajności dla aplikacji WinUI.

Jak używać narzędzia Windows Performance Recorder do monitorowania aplikacji WinUI?

Rejestrator wydajności systemu Windows (WPR) może służyć do tworzenia szczegółowych nagrań śledzenia zdarzeń systemu Windows (ETW) dotyczących zachowania systemu i aplikacji oraz użycia zasobów na podstawie wbudowanych profilów. Te nagrania ETW można następnie przetworzyć za pomocą Analizatora wydajności systemu Windows (WPA), aby utworzyć zestaw grafów i tabel w celu łatwiejszego użycia i szczegółowej analizy użycia procesora CPU, problemów z zasilaniem, słabej wydajności systemu lub aplikacji oraz innych problemów z wydajnością.

Uwaga / Notatka

Chociaż istnieje zarówno graficzny interfejs użytkownika, jak i wersje wiersza polecenia funkcji WPR, w tym temacie opisano tylko wersję graficznego interfejsu użytkownika (zobacz Wprowadzenie do funkcji WPR , aby uzyskać więcej informacji na temat obu wersji).

Profile WPR

Profile funkcji WPR służą do zbierania informacji na temat różnych aspektów i zachowań aplikacji.

Na poniższej ilustracji widoczne jest okno programu Windows Performance Recorder z profilem "Użycie procesora" (użycie procesora dla każdego procesora w systemie) oraz profilem "Aktywność XAML" (zdarzenia od dostawców związanych z XAML, takich jak WinUI).

Zrzut ekranu przedstawiający rejestrator wydajności systemu Windows z wybranymi profilami aktywności procesora CPU i XAML.

Jak używać analizatora wydajności systemu Windows z aplikacjami WinUI?

WinUI to deklaratywne API w trybie zachowanego, w którym aplikacja opisuje drzewo elementów interfejsu użytkownika, a WinUI uruchamia układ i renderuje go. Odbywa się to w wątku interfejsu użytkownika w partiach o nazwie "klatki", co powinno zakończyć się szybko, najlepiej w czasie jednego cyklu odświeżania ekranu. Gdy ramki działają długo, nie tylko opóźnia aktualizacje dotarcia do ekranu, ale także uniemożliwia wątkowi interfejsu użytkownika obsługę wejścia. Powolne klatki, chociaż nie są jedyną przyczyną problemów z responsywnością, należą do najczęstszych.

Instalowanie wtyczki "Analiza ramek XAML"

WinUI rejestruje zdarzenia ETW, które śledzą uruchamianie i zatrzymywanie każdej ramki (pokazano na poniższym zrzucie ekranu tabeli WPA "Zdarzenia ogólne"). Jednakże ze względu na to, że czas trwania każdej klatki musi być obliczany ręcznie, trudno jest zidentyfikować przypadki klatek uruchamianych powoli.

Zrzut ekranu Windows Performance Analyzer pokazujący tabelę Zdarzeń ogólnych z serią początków i zakończeń ramek.

Aby rozwiązać ten problem, nowa wtyczka tabeli "Analiza ramek XAML" jest dołączona do zestawu narzędzi Windows Assessment Toolkit (ADK) 10.1.26100.1 i nowszych. Ta tabela oblicza i przedstawia czas trwania każdej klatki (wraz z innymi operacjami czasochłonnymi).

Uwaga / Notatka

Tabela "Analiza ramek XAML" wymaga Windows Performance Analyzer (WPA) z Windows ADK 10.1.26100.1 lub nowszego. Wersja funkcji WPR używana do śledzenia nie ma znaczenia.

Po zainstalowaniu zestawu ADK tabela "Analiza ramek XAML" musi być włączona, edytując plik konfiguracji "perfcore.ini" w folderze WPA (zazwyczaj C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit). Aby to zrobić, zamknij wszystkie otwarte wystąpienia WPA, otwórz plik "perfcore.ini" w edytorze tekstowym, dodaj perf_xaml.dll do listy bibliotek DLL i zapisz oraz zamknij plik. Uruchom ponownie usługę WPA, która powinna teraz wyświetlać wykres "Analiza ramek XAML" w dolnej części sekcji Aktywność systemu.

Zrzut ekranu z Windows Performance Analyzer przedstawiający tabelę analizy ramek XAML w dolnej części sekcji Aktywności systemu.

Używanie wtyczki "Analiza ramek XAML"

Analiza ramek Xaml obsługuje dwa widoki (oba widoki pokazują te same kolumny):

  • "Ciekawe ramki Xaml" (ustawienie domyślne) — pokazuje ramki WinUI oparte na heurystyce, które identyfikują te, które najprawdopodobniej spowodują problemy z czasem odpowiedzi. Odpowiadają to regiony, które rozpoczynają się operacjami, takimi jak inicjowanie interfejsu WinUI, nawigacja ramką lub wyświetlanie wysuwanego okna, a kończą się na zakończeniu następnej ramki. Te scenariusze zwykle obejmują obszerne zmiany drzewa UIElement i są najbardziej podatne na problemy z wydajnością.
  • "Wszystkie informacje Xaml" — pokazuje wszystkie ramki WinUI ze wszystkich procesów znalezionych w śladzie. W przypadku operacji, takich jak ramka lub przekazywanie układu, wtyczka automatycznie oblicza i wyświetla czasy trwania na podstawie zdarzeń Uruchamiania i Zatrzymywania.

Poniższy zrzut ekranu przedstawia sposób przełączania się między widokami analizy ramek Xaml.

Zrzut ekranu z Analizatora wydajności Windows pokazujący selektory widoków dla tabeli Xaml Frame Analysis.

Oba widoki analizy ramek Xaml zawierają następujące kolumny:

Tytuł Wartość
Przetwarzanie Nazwa i identyfikator procesu
Identyfikator wątku Identyfikator wątku
Typ Opisuje zdarzenie odpowiadające wierszowi. Możliwe wartości to:
  • WXM::InitializeForCurrentThread — wywołanie WindowsXamlManager.InitializeForCurrentThread. Inicjuje interfejs WinUI w wątku.
  • DWXS::Initialize — wywołanie DesktopWindowXamlSource.Initialize. Inicjuje wyspę WinUI.
  • Frame — ramka w wątku interfejsu użytkownika. Uruchamia układ i renderuje zmiany w drzewie od poprzedniej ramki.
  • Tworzenie urządzenia graficznego — Utwórz urządzenie D3D i D2D dla platformy WinUI. Występuje w wątku w tle.
  • UpdateLayout — układ przekazywany w wątku interfejsu użytkownika. Występuje w ramach ramki, ale może być również wyzwalany przez aplikację za pośrednictwem UIElement.UpdateLayout.
  • Frame::Navigating — WinUI zgłasza zdarzenie Frame.Navigating .
  • Frame::Navigated — WinUI zgłasza zdarzenie Frame.Navigated .
  • Hwnd Focus — aktywna wartość hwnd została zmieniona.
  • Region zainteresowania — region obliczony przez wtyczkę na potrzeby interesujących scenariuszy. Rozpoczyna się po zdarzeniach, takich jak inicjowanie winUI, nawigacja ramką i otwieranie menu. Zatrzymuje się na końcu następnej klatki.
CzyJestInteresujące Czy wiersz jest uznawany za interesujący. W widoku Ciekawe ramki Xaml są wyświetlane tylko interesujące wiersze.
Czas trwania (ms) Czas trwania rzędów. Obliczane ze zdarzeń uruchamiania i zatrzymywania.
Waga (ms) Rzeczywisty czas działania CPU odpowiadający czasowi trwania.
Początek (s) Godzina rozpoczęcia zdarzenia
Zatrzymywanie (s) Godzina zatrzymania zdarzenia

Kolumny można sortować według typu lub czasu trwania, aby pomóc zidentyfikować potencjalne problemy, takie jak najdroższe, najdłuższe ramki czasu trwania w śladzie (zobacz poniższą ilustrację). Możesz również przejść do szczegółów określonych wierszy, aby zidentyfikować kosztowne operacje i potencjalne optymalizacje.

Zrzut ekranu z programu Windows Performance Analyzer przedstawiający tabelę 'Wszystkie informacje XAML', posortowaną według czasu trwania (ms).