Environment.TickCount против DateTime.Now - PullRequest
       31

Environment.TickCount против DateTime.Now

59 голосов
/ 28 октября 2008

Можно ли использовать Environment.TickCount для расчета промежутков времени?

int start = Environment.TickCount;
// Do stuff
int duration = Environment.TickCount - start;
Console.WriteLine("That took " + duration " ms");

Поскольку TickCount подписано и будет перенесено через 25 дней (для достижения всех 32 битов требуется 50 дней, но вы должны отбросить бит со знаком, если вы хотите понять математику), похоже слишком рискованно, чтобы быть полезным.

Вместо этого я использую DateTime.Now. Это лучший способ сделать это?

DateTime start = DateTime.Now;
// Do stuff
TimeSpan duration = DateTime.Now - start;
Console.WriteLine("That took " + duration.TotalMilliseconds + " ms");

Ответы [ 12 ]

0 голосов
/ 28 октября 2008

Я использую Environment.TickCount, потому что:

  1. Класс Секундомер отсутствует в Compact Framework.
  2. Секундомер использует тот же механизм синхронизации, что и TickCount, поэтому результаты не будут более или менее точными.
  3. Космическая проблема с TickCount вряд ли будет решена (вам придется оставить компьютер включенным на 27 дней, а затем попытаться измерить время, которое, как оказалось, охватывает период момент), и даже если вы нажмете на него, результатом будет огромный отрицательный промежуток времени (так что он как бы выделится).

При этом, я бы также рекомендовал использовать секундомер, если он вам доступен. Или вы можете потратить около 1 минуты и написать класс, похожий на секундомер, который обернет Environment.TickCount.

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

0 голосов
/ 28 октября 2008

Вместо этого следует использовать класс Секундомер .

...