我需要检查运行几个脚本需要多长时间,并且想确保我知道如何使用计时器,所以我在下面写了一个简短的测试来检查我的逻辑:
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,因为这是睡眠的长度。
有谁知道这里发生了什么?我还用其他面额(分钟,小时,秒)对此进行了测试,结果同样令人困惑。
每次运行此脚本时,结果都不同,我似乎无法确定任何模式。
答案 0 :(得分:2)
秒表没什么问题。 TimeSpan.Miliseconds返回TimeSpan的毫秒组件。您应该使用TimeSpan.TotalMiliseconds属性来检索经过的毫秒数。
最准确的值是TimeSpan.Ticks。秒表不会自行计时,它会在系统启动和停止时读取系统高分辨率计时器的滴答值。 Ticks属性包含这种差异。
您可以从秒表本身检索相同的值,例如。 Stopwatch.ElapsedTicks,Stopwatch.ElapseMiliseconds
答案 1 :(得分:0)