System.Diagnostics.Stopwatch クラスには、短時間 (つまり 20 秒) であっても測定可能な不正確さがあるように思われることがわかりました。私のプロセスは、20 秒実行するようにコーディングされたプロセスに対して 20.3 秒以上の経過時間を示しています。
$elapsed = [System.Diagnostics.Stopwatch]::StartNew()
write-host "Started at $(get-date)"
for ($t=1; $t -le 20; $t++) {
Write-Host "Elapsed Time: $($elapsed.Elapsed.ToString())"
sleep 1
}
write-host "Ended at $(get-date)"
write-host "Total Elapsed Time: $($elapsed.Elapsed.ToString())"
Started at 02/02/2013 15:08:43
Elapsed Time: 00:00:00.0329924
Elapsed Time: 00:00:01.0417435
Elapsed Time: 00:00:02.0547547
Elapsed Time: 00:00:03.0689716
Elapsed Time: 00:00:04.0820497
Elapsed Time: 00:00:05.0963413
Elapsed Time: 00:00:06.1113915
Elapsed Time: 00:00:07.1244044
Elapsed Time: 00:00:08.1396105
Elapsed Time: 00:00:09.1528952
Elapsed Time: 00:00:10.1659905
Elapsed Time: 00:00:11.1800884
Elapsed Time: 00:00:12.1940009
Elapsed Time: 00:00:13.2081824
Elapsed Time: 00:00:14.2223585
Elapsed Time: 00:00:15.2375023
Elapsed Time: 00:00:16.2506360
Elapsed Time: 00:00:17.2656845
Elapsed Time: 00:00:18.2790676
Elapsed Time: 00:00:19.2928700
Ended at 02/02/2013 15:09:04
Total Elapsed Time: 00:00:20.3080067
PowerShell で Stopwatch クラスを使用する場合、このような精度のドリフトは予想されますか? タイムスパンに不釣り合いに増加しているようです (つまり、10 秒は 0.1 ずれ、20 秒は 0.3 ずれています)。私のコードに問題がありますか?