Точное время в .NET - PullRequest
       37

Точное время в .NET

2 голосов
/ 14 октября 2009

Мне нужен доступ к очень точному времени в приложении .NET.

Мне нужна точность в микросекундах.

Есть ли простой способ сделать это в .NET?

Ответы [ 6 ]

6 голосов
/ 14 октября 2009

System.Diagnostics.Stopwatch - правильный класс для этой степени детализации вашего времени, но убедитесь, что вы используете свойство Elapsed.Ticks вашего объекта Секундомер вместо его ElapsedTicks свойство, так как это две разные вещи.

  • ElapsedTicks (без точки) относится к числу тактов секундомера и, следовательно, должно использоваться совместно с Stopwatch.Frequency (что не является одинаково на всех машинах) для расчета прошедшего времени.
  • Elapsed.Ticks ( с точкой) дает число Timespan тиков и не зависит от частоты секундомера.

Это, вероятно, одна из самых тонких потенциальных ошибок в .Net.

Кроме того, помните, что секундомер является очень гранулированным, но это не обязательно все, что точно (в зависимости от вашего определения термина). Прошедшее время, возвращаемое секундомером, будет отклоняться от системного времени.

На моем ноутбуке секундомер работает почти на 5 секунд вперед за 24 часа, а на некоторых других машинах этот эффект еще хуже.

Если вы рассчитываете короткие промежутки времени, конечно, этот эффект не должен иметь большого значения.

4 голосов
/ 14 октября 2009

Класс Stopwatch - лучшая точность, которую вы можете получить, он использует высокочастотный таймер.
Частота секундомера зависит от частоты процессора, но обычно она составляет миллионы раз в секунду.

Если ЦПУ не предоставляет высокочастотный таймер, класс переключится на системный таймер, который находится в диапазоне 100-50 раз в секунду.

3 голосов
/ 14 октября 2009

Используйте класс Секундомер , следует выполнить свое действие.

2 голосов
/ 14 октября 2009

Класс Секундомер - ваш лучший выбор благодаря точности:

http://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.aspx

Пример:

https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6167361.html

1 голос
/ 14 октября 2009

Помимо System.Diagnostics.StopWatch также проверьте эту ссылку: Мультимедийный таймер для .NET Framework . НТН

0 голосов
/ 31 марта 2013

Я нашел метод, который работает немного точнее, чем StopWatch, PerformanceCounters и любые другие реализации, с которыми я сталкиваюсь, и не требует Platform Invoke или иным образом.

См. https://stackoverflow.com/questions/15725711/obtaining-microsecond-precision-using-net-without-platform-invoke

Дайте мне знать, если вы найдете иначе!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...