2012-10-27 2 views
11

WinRT의 백그라운드 작업에 대한 CPU 사용량 할당량은 1 초 또는 잠금 화면에있는 경우 2 초입니다. 문제는이 CPU 사용량을 정확히 측정하는 방법입니다. 코드가이 2 초의 할당량 이하로 실행되는지 여부를 알고 싶습니다. 나는 단지 DateTime.Now를 사용하여 작업을 실행하기 전과 후에 올바른 접근 방식이 아니라고 생각합니다. 배경 작업에 대한
은 MSDN 문서 : Supporting your app with background tasks백그라운드 작업에서 CPU 사용을 정확하게 측정하는 방법은 무엇입니까?

+0

i5가 ARM 기반 프로세서보다 더 많은 코드를 실행할 수 있다고 생각합니다. 앱이 2 초 이상 걸릴지를 테스트 할 때 가장 느린 프로세서가 필요합니까? – GameScripting

+0

좋은 점이라면, 로우 엔드 ARM 태블릿에 대한 우리의 백그라운드 작업을위한 Core-i7 비브록 데스크탑보다 컴퓨팅 파워가 훨씬 적습니다. –

+0

웹 작업자는 백그라운드 작업과 동일한가요? 이미지를 가져오고 캐시하고 싶지만 2 초는 처리 시간이 충분하지 않은 것 같습니다 (특히 자르기부터 저장하고 싶습니다). – kamranicus

답변

0


내가 같은 문제가 있었다.

을 시작하면 App history 탭 아래에서 다양한 앱의 리소스 사용 통계를 볼 수 있습니다. 그 중 하나는 CPU Time입니다. 문제는 평균이 아니지만 총 CPU 사용 시간 만 표시한다는 것입니다.

평균 시간이 필요한 경우 트릭은 백그라운드 활동에 대해 앱에 카운트를 유지하고 전체 시간을 평균으로 나누어 평균 시간을 얻는 것입니다.

+0

이것이 바로 CPU 사용량을 측정하기 위해 지금 할 수있는 최선의 방법이라고 생각합니다. 감사합니다. –

0

나는 GetProcessTimes WinAPI를 사용했습니다.

문서는 "바탕 화면은 애플 리케이션"라고하지만, 기술적으로, 심지어는 휴대폰에 존재 : PC에서

[DllImport("KERNELBASE.DLL", SetLastError = true)] 
    static extern IntPtr GetCurrentProcess(); 

    // NB! Undocumented API, won't pass marketplace checks. 
    [DllImport("KERNELBASE.DLL", SetLastError = true)] 
    [return: MarshalAs(UnmanagedType.Bool)] 
    static extern bool GetProcessTimes(IntPtr hProcess, out long lpCreationTime, out long lpExitTime, out long lpKernelTime, out long lpUserTime); 

가 Kernel32.dll에서와 KERNELBASE.DLL를 교체합니다.

이는 마켓 플레이스 인증을 통과하지는 못하지만 백그라운드 작업을 벤치마킹하기에 충분해야합니다.

GetProcessTimes가 시작되면 long startTime = KernelTime + UserTime을 계산하십시오. 완료되면 GetProcessTimes를 호출하고 (KernelTime + UserTime) - startTime을 계산하면 데이터를 얻을 수 있습니다. 측정 단위는 TimeSpan 에서처럼 100ns 틱입니다.

관련 문제