다음을 통해 공유


백그라운드 작업을 최소화하여 전력 소비량 및 배터리 수명 개선

본 가이드는 Windows 애플리케이션에서 전원을 사용하는 방식을 개선하는 방법을 소개하며, 전반적인 장치 성능 및 배터리 수명 개선에 유익한 원칙을 제안합니다.

전력 소비를 개선하기 위한 제일 기본적인 원칙은, 앱이 백그라운드에 있는 동안에 다음과 같이 하지 않는 것입니다.

  • 시스템 리소스 사용,
  • 타이머를 통해 CPU 깨우기,
  • vsync 이벤트를 기다렸다가 CPU 깨우기입니다.

"백그라운드에" 있다는 것은 앱이 사용자에게 보이지 않거나 들리지 않는다는 의미입니다. 백그라운드에서 CPU를 깨우거나 시스템 리소스를 사용할 이유가 거의 없어야 합니다. 앱에서 이러한 이벤트가 발생하는지 확인하고 원인을 해결하면 앱의 전력 소비와 배터리 수명을 대폭 개선하고 고객이 앱을 사용하면서 발생하는 탄소 배출량을 감소시킬 수 있습니다.

앱을 사용하지 않는 동안 CPU가 불필요한 작업을 처리하기 위해 깨어나지 않는지 확인하려면 Windows 성능 분석기(WPA)로 추적을 캡처 및 분석할 수 있습니다. 아래에서 그 방법을 단계별로 설명하겠습니다.

불필요한 작업 추적 및 검사 캡처

전력을 소모할 수 있는 불필요한 작업이 진행되고 있는지 분석하기 위해 추적을 캡처하기 전 앱을 실행할 때 올바른 조건을 설정하는 것이 중요합니다. 또한 여러 다른 조건에서 앱을 테스트하기 위해 여러 추적을 실행해도 좋습니다.

설정

  1. 작업 관리자를 열고 CPU 사용률이 5% 미만인지 확인하여 테스트 장치를 유휴 상태로 만듭니다. 그러면 측정 간섭을 최소화하고 합리적인 크기의 추적을 하게 됩니다.

  2. 앱을 시작하고 일반적으로 사용되는 보기로 이동합니다.

  3. 앱을 최소화합니다. *앱 창이 다른 창 뒤에 완전히 가려진 상태(보이지 않게 차단됨)에서 앱이 포그라운드에 있는 경우, 사용자의 상호 작용이 없는 기간에 앱에서 불필요한 작업이 시작되지 않도록 다음 단계를 반복할 수 있습니다.

백그라운드에서 CPU 사용 측정 및 평가

  1. 명령줄(PowerShell 또는 명령 프롬프트)을 관리자 모드에서 엽니다. 관리자 모드에서 실행하지 않으면 오류 코드: 0xc5585011, "시스템 성능을 프로파일링하기 위해 정책을 활성화하지 못했습니다"가 표시될 수 있습니다.)

  2. wpr -start power -filemode 명령을 입력합니다.

  3. 5분 동안 장치를 유휴 상태로 둡니다.

  4. wpr -stop idletrace.etl 명령을 입력합니다.

  5. Windows 성능 분석기(WPA)로 추적을 열려면 wpa.exe idletrace.etl 명령을 입력합니다.

  6. 계산>CPU 사용량(정밀) 그래프를 엽니다.

    • 프로세스(또는 다중 프로세스 모델인 경우 앱과 관련된 모든 프로세스)로 이동하여 Cswitch 수인 "CPU별 사용률"을 평가합니다. 백그라운드에 앱이 있는 동안에는 가급적 0에 가깝게 설정하는 것이 바람직합니다. 스택을 살펴보는 것은 리소스를 사용하는 위치와 개선 방법을 찾는 좋은 방법입니다.

    • "새 스레드 스택"을 추가하여 스레드가 발생한 스택을 확인해서 과도한 발생을 찾습니다.

    CPU 프로세스, 개수 및 사용 비율을 보여 주는 WPA 그래프

  7. 계산>CPU 사용량(샘플링) 그래프를 엽니다. 코드 내 실행에 소요되는 시간을 평가하여 CPU 사용 문제를 추적합니다.

백그라운드에서 대기 중인 vsync 측정 및 평가

참고 항목

이 고급 시나리오를 조사하기 전에 이전 섹션의 기본 CPU 사용량에 집중합니다.

  1. 관리자 모드에서 명령줄(PowerShell 또는 명령 프롬프트)을 엽니다.

  2. wpr -start gpu -filemode 명령을 입력합니다.

  3. 5분 동안 해당 장치를 유휴 상태로 둡니다.

  4. wpr -stop gputrace.etl 명령을 입력합니다.

  5. Windows 성능 분석기(WPA)로 추적을 열려면 wpa.exe gputrace.etl 명령을 입력합니다.

  6. 시스템 활동>일반 이벤트 그래프를 엽니다.

    • "Microsoft-Windows-Dxgkrnl" 이벤트로 필터링합니다.
    • 두 번째 열로 프로세스 열을 끌어옵니다.
    • WaitForVsync를 호출하는지 확인합니다. 예를 들면 IDXGIOutput::WaitForVBlank(dxgi.h)와 같은 API를 통해 WaitForVerticalBlankEventInternal 이벤트를 통과합니다.

    MS Edge webview2 이벤트를 보여 주는 WPA 그래프

To learn more, see the article Windows 성능 분석기로 최신 대기 문제 분석 문서에서 자세한 내용을 알아보세요.

추가 리소스