Самый быстрый способ рассчитать разницу во времени в C #? - PullRequest
0 голосов
/ 12 сентября 2011

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

private const int timeBetweenEvents = 250;    //delay ms
DateTime nextUpdate = DateTime.Now.Add(new TimeSpan(0, 0, 0, timeBetweenEvents));
...
while(true)
{
   if (DateTime.Now > nextUpdate)
   {
       // do something
       nextUpdate = DateTime.Now.Add(new TimeSpan(0, 0, 0, timeBetweenEvents));
   }
   // ...
   // do some other stuff
   // ...
}

другой вариант ...

private const int timeBetweenEvents = 250;    //delay ms
TimeSpan nextUpdate = DateTime.Now.TimeOfDay.Add(new TimeSpan(0,0,0,timeBetweenEvents));
...
while(true)
{
   if (DateTime.Now.TimeOfDay > nextUpdate)
   {
       // do something
       nextUpdate = DateTime.Now.TimeOfDay.Add(new TimeSpan(0, 0, 0, timeBetweenEvents));
   }
   // ...
   // do some other stuff
   // ...
}

Я также видел подобные вещи, делая вычитания с использованием System.Environment.TickCount.Так какой же самый лучший способ сделать это?

Ответы [ 4 ]

2 голосов
/ 12 сентября 2011

Я бы использовал Таймер

2 голосов
/ 12 сентября 2011

DateTime, Environment.TickCount и Thread.Sleep имеют разрешение 30 мс, что может вызвать проблемы.Stopwatch не имеет этой проблемы (на платформах, которые ее поддерживают, то есть практически на любой машине сегодня) - плюс код также немного короче (самый быстрый код - это код, который никогда не выполняется) и яснее.

const long millisecondsBetweenEvents = 250;
var sw = new Stopwatch();

sw.Start();
while(true)
{
   if (sw.ElapsedMilliseconds > millisecondsBetweenEvents)
   {
      // do something
      sw.Restart();
   }
}
1 голос
/ 12 сентября 2011

Если вы ищете производительность, по крайней мере кэшируйте значение DateTime.Now вне цикла.Я помню, что чтение - это относительно дорогая функция для вызова.

0 голосов
/ 12 сентября 2011

A StopWatch будет иметь лучшую точность.

...