2009-09-17 2 views

ответ

6

Если это высокое разрешение счетчика, нет никакой гарантии, что значение имеет какой-либо корреляция с реальным временем - например, это может быть «тики с момента загрузки компьютера». Для не - таймер с высоким разрешением, вы можете использовать new DateTime(Stopwatch.GetTimestamp()), но это не обязательно даст полезное значение для таймера с высоким разрешением. (Это, конечно, не на моей коробке.)

Для чего вы это пытаетесь использовать? Идея Stopwatch заключается в измерении интервалов времени.

+0

Хотел спросить, почему «нет корреляции»? OS ticks являются постоянными, поэтому 100 мс должно быть очень похоже на 100 мс на любых часах (с точки зрения интервала). Единственный способ, которым они должны отличаться, это смещение между реальным временем и инициализацией счетчика OS-тигма, правильно? После инициализации счетчика тиков Os длина интервала должна быть такой же, как и для «любых» точных часов? –

+1

@ Mindaugas: Системные часы могли быть изменены из-за изменения часового пояса, ручной коррекции времени или автоматической коррекции, например. через NTP. Дело в том, что если вы хотите измерить прошедшее время, вы используете секундомер, но это * не даст вам DateTime, потому что он измеряет только прошедшее время. –

+0

Спасибо большое! Я думал о более коротком диапазоне времени, но спасибо за то, что дал мне больше понимания. –

0

Имейте в виду, что если вы пытаетесь отслеживать прошедшее время вы должны использовать:

Stopwatch sw = Stopwatch.StartNew(); 
//do stuff 
sw.Elapsed; //or 
sw.ElapsedMilliseconds; 

Это точно конвертирует клещей в реальном масштабе времени. Преобразование тиков в DateTime, а затем сравнение DateTimes также будет работать, но выше это проще.

Некоторые из них (в том числе и я) ошибочно использовали код, как это, и получил плохие времена из него:

startTime = Stopwatch.GetTimestamp(); 

totalTime = (Stopwatch.GetTimestamp() - startTime)/10000; 
//it was assumed 10,000 ticks was a millisecond, incorrectly 
+1

Секундомер. Частота, которая представляет собой количество тиков pr. сек, можно исправить ваш последний пример: elapsedMs = (секундомер.GetTimestamp() - startTime)/(секундомер. Частота/1000); – Jens