11

WinRT 中后台任务的 CPU 使用配额为 1 秒,如果它们处于锁屏状态,则为 2 秒。问题是如何准确测量这个 CPU 使用率 - 我想知道我的代码是否在这 2 秒的配额下运行?我猜在执行任务之前和之后只使用 DateTime.Now 不是正确的方法。
关于后台任务的 MSDN 文章:
使用后台任务支持您的应用程序

4

2 回答 2

0

我有同样的问题。

如果您开始Task Manager,在App history选项卡下,您可以看到各种应用程序的资源使用情况统计信息。其中之一是CPU Time。问题是它不是平均值,它只显示总 CPU 使用时间。

如果您需要平均时间,诀窍是在您的应用程序中记录任何后台活动,然后将整个时间除以该平均时间,这样您就可以获得平均时间。

于 2012-12-27T23:54:35.153 回答
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 上将 KERNELBASE.DLL 替换为 Kernel32.dll。

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

启动时调用 GetProcessTimes,计算long startTime = KernelTime + UserTime. 完成后调用 GetProcessTimes,计算( KernelTime + UserTime ) - startTime,然后你就得到你的数据。测量单位是 100ns 滴答,就像在 TimeSpan 中一样。

于 2016-04-30T17:55:28.893 回答