Tìm lớp System.Diagnostics.Stopwatch có những thứ có vẻ đo lường không chính xác ngay cả trong khoảng thời gian ngắn (tức là 20 giây). quá trình của tôi hiển thị thời gian trôi qua của 20.3+ giây cho một quá trình mã hoá để chạy 20 giây:Powershell hẹn giờ/độ chính xác đồng hồ bấm giờ
$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
là loại này chính xác trôi dạt để được mong đợi khi sử dụng lớp Stopwatch trong Powershell? Dường như tăng không cân xứng với khoảng thời gian (nghĩa là 10 giây bị tắt 0,1 và 20 bằng 0,3). Mã của tôi có bị lỗi không?
Loại bỏ các cuộc gọi Bắt đầu và Kết thúc cuộc gọi ghi và nó sẽ còn gần hơn. Đồng hồ bấm giờ sử dụng api truy cập tần số cao của Windows để nó khá chính xác. –
Rynant, sẽ mất 20 giây. Nhưng nó sẽ không còn là đồng hồ bấm giờ nữa - chỉ là một bộ đếm thời gian ngủ. Điều đó sẽ ngừng tập lệnh của tôi chạy cho đến khi giấc ngủ hoàn tất. Tôi cần nó để chạy một quá trình và cuối cùng, cho tôi biết phải mất bao lâu để hoàn thành. –
Tôi nghĩ rằng bạn đã bỏ lỡ điểm của ví dụ của tôi. Tôi đã cố gắng cho thấy lớp 'Diagnostics.Stopwatch' không chính xác. Lý do đồng hồ bấm giờ trong kịch bản của bạn cho thấy "20.3080067" giây là bởi vì kịch bản của bạn đang làm những việc khác ngoài việc ngủ. Ngoài ra, lý do các câu lệnh 'Get-Date' xuất hiện chính xác 20 giây là do thời gian hiển thị được làm tròn đến giây gần nhất. – Rynant