이 항목에서는 Windows Performance Toolkit 성능 모니터링 도구를 사용하여 WinUI 애플리케이션에 대한 심층적인 성능 프로필을 생성하는 방법을 설명합니다.
Windows 성능 레코더를 사용하여 WinUI 앱을 모니터링하려면 어떻게 해야 하나요?
WPR(Windows 성능 레코더)을 사용하여 기본 제공 프로필을 기반으로 시스템 및 애플리케이션 동작 및 리소스 사용량에 대한 자세한 ETW(Windows용 이벤트 추적) 기록을 만들 수 있습니다. 그런 다음 WPA(Windows 성능 분석기)에서 이러한 ETW 기록을 처리하여 CPU 사용량, 전원 문제, 시스템 또는 애플리케이션 성능 저하 및 기타 성능 문제를 보다 쉽게 사용하고 심층 분석할 수 있도록 그래프 및 테이블 집합을 생성할 수 있습니다.
메모
WPR의 GUI 및 명령줄 버전이 모두 있지만 이 항목은 GUI 버전만 참조합니다(두 버전에 대한 자세한 내용은 WPR 소개 참조).
WPR 프로필
WPR 프로필은 앱의 다양한 측면 및 동작에 대한 정보를 수집하는 데 사용됩니다.
다음 이미지에서 Windows 성능 레코더 창은 "CPU 사용량" 프로필(시스템의 각 CPU에 대한 CPU 사용률) 및 "XAML 활동" 프로필(WinUI와 같은 XAML 관련 공급자의 이벤트)이 선택된 상태로 표시됩니다.
WinUI 앱에서 Windows Performance Analyzer 사용하려면 어떻게 해야 하나요?
WinUI는 앱이 UIElements 트리를 설명하고 WinUI가 레이아웃을 실행하고 렌더링하는 선언적 보존 모드 API입니다. 이 작업은 "프레임"이라는 일괄 처리로 UI 스레드에서 수행되며, 이는 디스플레이의 한 새로 고침 간격 내에서 빠르게 완료되어야 합니다. 프레임이 오래 실행되면 업데이트가 디스플레이에 표시되지 않도록 지연할 뿐만 아니라 UI 스레드가 입력을 처리하지 못하게 합니다. 느린 프레임은 응답성 문제의 유일한 이유는 아니지만 가장 일반적인 이유 중 하나입니다.
"XAML 프레임 분석" 플러그 인 설치
WinUI는 각 프레임의 시작 및 중지를 추적하는 ETW 이벤트를 기록합니다(WPA "제네릭 이벤트" 테이블의 다음 스크린샷에 표시됨). 그러나 각 프레임의 기간을 수동으로 계산해야 하므로 느린 프레임 발생을 식별하기는 어렵습니다.
이 문제를 해결하기 위해 새 "XAML 프레임 분석" 테이블 플러그 인이 Windows ADK(평가 도구 키트) 10.1.26100.1 이상에 포함되어 있습니다. 이 표에서는 각 프레임의 기간을 계산하고 보여 줍니다(다른 시간이 많이 걸리는 작업과 함께).
메모
"XAML 프레임 분석" 테이블에는 Windows ADK 10.1.26100.1 이상의 WPA(Windows Performance Analyzer)가 필요합니다. 추적을 수행하는 데 사용되는 WPR 버전은 중요하지 않습니다.
ADK가 설치되면 WPA 폴더에서 "perfcore.ini" 구성 파일(일반적으로 C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit)을 편집하여 "XAML 프레임 분석" 테이블을 사용하도록 설정해야 합니다. 이렇게 하려면 열려 있는 WPA 인스턴스를 닫고, 텍스트 편집기에서 "perfcore.ini"을 연 다음, dll 목록에 perf_xaml.dll를 추가하고, 파일을 저장한 후 닫습니다. WPA를 다시 시작합니다. 이제 시스템 작업 섹션의 맨 아래에 "XAML 프레임 분석" 그래프가 표시됩니다.
"XAML 프레임 분석" 플러그 인 사용
Xaml 프레임 분석은 두 개의 뷰를 지원합니다(두 보기 모두 동일한 열을 표시).
- "흥미로운 Xaml 프레임"(기본값) - 응답성 문제를 일으킬 가능성이 가장 큰 추론을 기반으로 WinUI 프레임을 표시합니다. 이러한 영역은 WinUI 초기화, 프레임 탐색 또는 플라이아웃 표시와 같은 작업으로 시작하고 다음 프레임의 끝부분에 중지되는 지역에 해당합니다. 이러한 시나리오는 일반적으로 UIElement 트리에 대한 광범위한 변경 내용을 포함하며 성능 문제에 가장 취약합니다.
- "모든 Xaml 정보" - 추적에 있는 모든 프로세스의 모든 WinUI 프레임을 표시합니다. 프레임 또는 레이아웃 패스와 같은 작업의 경우 플러그 인은 시작 및 중지 이벤트에 따라 기간을 자동으로 계산하고 표시합니다.
다음 스크린샷은 Xaml 프레임 분석 보기 간에 전환하는 방법을 강조 표시합니다.
두 Xaml 프레임 분석 보기에는 다음 열이 포함됩니다.
| Title | 가치 |
|---|---|
| 프로세스 | 프로세스 이름 및 ID |
| 스레드 ID | 스레드 ID |
| 유형 | 행에 해당하는 이벤트를 설명합니다. 가능한 값에는 다음이 있습니다.
|
| 흥미롭다 | 행이 흥미로운 것으로 간주되는지 여부입니다. 흥미로운 Xaml 프레임 보기에는 흥미로운 행만 표시됩니다. |
| 기간(밀리초) | 행의 지속 시간입니다. 시작 및 중지 이벤트에서 계산됩니다. |
| 가중치(ms) | 기간에 해당하는 실제 CPU 실행 시간입니다. |
| 시작(들) | Start 이벤트의 시간 |
| 중지 | Stop 이벤트의 시간 |
열을 형식 또는 기간별로 정렬하여 추적에서 가장 비용이 많이 들고 가장 긴 기간 프레임과 같은 잠재적인 문제를 식별할 수 있습니다(다음 이미지 참조). 특정 행으로 드릴다운하여 비용이 많이 드는 작업 및 잠재적 최적화를 식별할 수도 있습니다.
Windows developer