【问题标题】:Timing execution time in .net and disregard OS hibernation time在 .net 中计时执行时间并忽略操作系统休眠时间
【发布时间】:2011-09-08 06:53:27
【问题描述】:

我们正在尝试在我们的应用程序中加入一些代码计时,但遇到了潜在问题。我们希望计时是稳健的,以便计算机休眠的时间段、计时暂停,从而为我们提供更精确的活动使用时间。我们一直在使用各种 BCL 和 P/Invoke 方法(Environment.TickCount、DateTime.UtcNow、Stopwatch、QueryPerformanceCounter(我认为 Stopwatch 在可用时在内部使用)和 timeGetTime(来自 winnm.dll、mmtimer.dll 或 core.dll))但它们都在计算机休眠时继续计数。

是否有任何强大的 BCL 或 P/Invoke 调用可以计算实际执行时间并在操作系统休眠时暂停?

我想另一种方法可能是使用上述方法之一并维持一个内部周期性滴答,这可以解释时间中的“漏洞”(这可能表明休眠期),但这似乎有点麻烦并且容易出错实施和验证。

编辑:根据要求,我会添加一点背景。我们正在创建一个小型库来对应用程序中的功能使用时间进行计时。我们希望避免依赖 3rd 方解决方案,因此我们需要坚持 BCL(或 P/Invoke,尽管我们希望避免这种情况)中的某些内容。我们收到了一些反馈,表明我们的一些时间已经过时了,并且发现我们没有意识到我们的时间代码对操作系统中的休眠并不健壮这一事实。因此,我们正在寻找一种解决方案来提供程序的实际执行时间。我们在寻找 CPU 使用率或类似的较低级别的计数器,我们想要一种方法来测量该功能的实际执行时间,并且我们不将休眠的操作系统视为执行时间。

【问题讨论】:

  • 请描述您希望通过时间实现的目标。除了手动跟踪时间之外,也许还有其他解决方案。
  • @PVitt 我已经添加了更多细节,希望能澄清我们的需求

标签: .net timing execution-time


【解决方案1】:

您可以在系统休眠时注册通知,使用函数RegisterSuspendResumeNotification

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

【讨论】:

    猜你喜欢
    • 2014-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2013-08-14
    • 1970-01-01
    • 2010-09-18
    • 1970-01-01
    • 2023-03-18
    相关资源
    最近更新 更多