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