如何在后台任务中精确测量CPU使用率?

时间:2012-10-27 20:10:51

标签: windows-8 microsoft-metro windows-runtime

WinRT中后台任务的CPU使用率配额为1秒,如果它们位于锁定屏幕上,则为2秒。问题是如何准确测量这种CPU使用情况 - 我想知道我的代码是否在这2秒的配额下运行?我想在执行任务之前和之后只使用DateTime.Now不是正确的方法 关于后台任务的MSDN文章:
Supporting your app with background tasks

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。

如果您启动Task Manager,请在App history标签下,查看各种应用的资源使用情况统计信息。其中一个是CPU Time。问题在于它不是平均值,而是仅显示总CPU使用时间。

如果您需要平均时间,诀窍是在应用中为任何背景活动计算一次,并将整个时间除以该值,这样您就可以获得平均时间。

答案 1 :(得分:0)

我使用了GetProcessTimes WinAPI。

文档说“仅桌面应用程序”,但从技术上讲,它甚至出现在手机上:

    [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 );

在PC上用Kernel32.dll替换KERNELBASE.DLL。

这不会通过市场认证,但应足以让您对后台任务进行基准测试。

启动时调用GetProcessTimes,计算long startTime = KernelTime + UserTime。完成后调用GetProcessTimes,计算( KernelTime + UserTime ) - startTime,然后获取数据。度量单位是100ns刻度,就像在TimeSpan中一样。