2016-03-31 2 views
1

Мне нужно проверить, сколько времени потребуется для запуска нескольких сценариев, и хотел, чтобы я знал, как использовать таймер, поэтому я написал короткий тест ниже, чтобы проверить мою логику:Сон или секундомер Немерное измерение

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

В секундомере нет ничего плохого. TimeSpan.Miliseconds возвращает milisecond Компонент TimeSpan. Вы должны использовать свойство TimeSpan.TotalMiliseconds для получения количества прошедших милисекунд.

Самое точное значение, хотя есть TimeSpan.Ticks. Секундомер не учитывает время сам по себе, он считывает значение в тиках таймера высокого разрешения системы, когда он запускается и останавливается. Свойство Ticks содержит эту разницу.

Вы можете получить одни и те же значения из самого Секундомера, например. Stopwatch.ElapsedTicks, Stopwatch.ElapseMiliseconds

0

Я нашел ответ на этот вопрос here.

$sw.elapsed.milliseconds покажет только миллисекунды, истекших (Опуская минуты и секунды)

Что мне нужно использовать это $sw.elapsedmilliseconds