计算C#时差的最快方法是什么?

时间:2011-09-12 13:33:26

标签: c# performance time timespan

似乎有很多方法可以计算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 个答案:

答案 0 :(得分:2)

DateTimeEnvironment.TickCountThread.Sleep的分辨率为30毫秒 - 这可能会导致问题。 Stopwatch没有这个问题(在支持它的平台上,即今天几乎所有的机器上) - 加上代码也稍短(最快的代码是从未执行过的代码)并且更清晰。

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

sw.Start();
while(true)
{
   if (sw.ElapsedMilliseconds > millisecondsBetweenEvents)
   {
      // do something
      sw.Restart();
   }
}

答案 1 :(得分:2)

我会使用Timer

答案 2 :(得分:1)

如果您正在寻找性能,请至少缓存循环外DateTime.Now的值。我记得读过它可能是一个相对昂贵的功能。

答案 3 :(得分:0)

StopWatch具有更好的精确度。