睡眠或秒表测量不准确
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
我需要检查几个脚本 运行 需要多长时间,并且想确保我知道如何使用计时器,所以我写了下面的简短测试来检查我的逻辑:
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