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