睡眠或秒表测量不准确

Sleep or Stopwatch Not Measuring Accurately

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

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,因为这是睡眠的长度。

有人知道这里发生了什么吗?我还用其他单位(分钟、小时、秒)测试了这一点,结果也同样令人困惑。

每次我 运行 这个脚本的结果都不一样,而且我似乎无法辨认出任何模式。

秒表没问题。 TimeSpan.Miliseconds returns the milisecond component of a TimeSpan. You should use the TimeSpan.TotalMiliseconds 属性 检索经过的毫秒数。

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

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

我找到了这个 here 的答案。

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

我需要用到的是$sw.elapsedmilliseconds