睡眠或秒表不能准确测量

时间:2016-03-31 14:31:00

标签: .net powershell timer stopwatch

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

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

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

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

2 个答案:

答案 0 :(得分:2)

秒表没什么问题。 TimeSpan.Miliseconds返回TimeSpan的毫秒组件。您应该使用TimeSpan.TotalMiliseconds属性来检索经过的毫秒数。

最准确的值是TimeSpan.Ticks。秒表不会自行计时,它会在系统启动和停止时读取系统高分辨率计时器的滴答值。 Ticks属性包含这种差异。

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

答案 1 :(得分:0)

我找到了这个here的答案。

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

我需要使用的是$sw.elapsedmilliseconds