在.net中计时执行时间并忽略OS休眠时间

时间:2011-09-08 06:53:28

标签: .net timing execution-time

我们正试图在我们的应用程序中加入一些代码时序,并遇到了潜在的问题。我们希望时机稳健,以便计算机休眠的时间段,暂停时间,为我们提供更精确的主动使用时间。我们已经使用各种BCL和P / Invoke方法(Environment.TickCount,DateTime.UtcNow,Stopwatch,QueryPerformanceCounter(我认为秒表在内部使用,如果可用)和timeGetTime(来自winnm.dll,mmtimer.dll或core.dll))但他们所有人都在休眠计算机的同时继续计票。

是否存在强大的BCL或P / Invoke调用,这些调用将计算实际执行时间并在操作系统休眠时暂停?

我想一个替代方案可能是使用上述方法之一并保持内部周期性滴答,可以解释时间中的“漏洞”(这可能表示休眠期),但这看起来有些麻烦且容易出错实施和验证。

编辑:根据要求,我会添加一些背景。我们正在创建一个小型库来完成应用程序中功能使用的计时。我们希望避免依赖第三方解决方案,因此我们需要坚持使用BCL(或P / Invoke,但我们希望避免这种情况)。我们得到了一些反馈意见,我们的一些时间安排已经过时,并发现我们没有意识到我们的时序代码对于操作系统中的休眠不稳定。因此,我们正在寻找一种解决方案来提供程序的实际执行时间。我们正在寻找CPU使用率或类似的低级别计数器,我们想要一种方法来衡量该功能的实际执行时间,我们不会将休眠操作系统视为执行时间。

1 个答案:

答案 0 :(得分:0)

您可以使用功能RegisterSuspendResumeNotification注册系统进入休眠状态的通知:

您可能还希望在工作站被锁定,屏幕保护程序运行或桌面使用系统事件通知服务通过快速用户切换来切换用户时接收通知: