【问题标题】:Sleep or Stopwatch Not Measuring Accurately睡眠或秒表测量不准确
【发布时间】:2016-07-20 01:55:57
【问题描述】:

我需要检查几个脚本运行需要多长时间,并且想确保我知道如何使用计时器,所以我编写了下面的简短测试来检查我的逻辑:

for($i = 0; $i -lt 11; $i++) {
    $sw = [Diagnostics.Stopwatch]::StartNew()
    Start-Sleep -Milliseconds 2000
    $sw.Stop()

    $elapsed =  $sw.Elapsed.Milliseconds
    Write-Host $elapsed
}

我只是启动一个计时器,调用Start-Sleep 2000 毫秒,然后输出(我认为会是)经过的时间(以毫秒为单位)。

这是输出:

1
6
11
11
12
9
11
12
12
11
8

我不是 100% 确定会从输出中得到什么,但我的假设是每行将超过 2000,因为这是睡眠的长度。

有人知道这里发生了什么吗?我还用其他面额(分钟、小时、秒)对此进行了测试,结果同样令人困惑。

每次运行此脚本时,结果都不同,而且我似乎无法找出任何模式。

【问题讨论】:

    标签: .net powershell timer stopwatch


    【解决方案1】:

    秒表没有任何问题。 TimeSpan.Miliseconds 返回 TimeSpan 的毫秒分量。您应该使用TimeSpan.TotalMiliseconds 属性来检索经过的毫秒数。

    不过,最准确的值是TimeSpan.Ticks。秒表本身不计算时间,它在启动和停止时读取系统高分辨率计时器的刻度值。 Ticks 属性包含该差异。

    您可以从秒表本身检索相同的值,例如。 Stopwatch.ElapsedTicks, Stopwatch.ElapseMiliseconds

    【讨论】:

      【解决方案2】:

      我找到了这个here的答案。

      $sw.elapsed.milliseconds仅显示已过去的毫秒数(忽略分钟和秒)

      我需要使用的是$sw.elapsedmilliseconds

      【讨论】:

        猜你喜欢
        • 2015-06-12
        • 1970-01-01
        • 2019-10-21
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2012-07-24
        • 1970-01-01
        相关资源
        最近更新 更多