似乎有很多方法可以计算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进行减法来看到类似的事情。那么这样做的最佳方法是什么?
答案 0 :(得分:2)
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 :(得分:2)
我会使用Timer
答案 2 :(得分:1)
如果您正在寻找性能,请至少缓存循环外DateTime.Now
的值。我记得读过它可能是一个相对昂贵的功能。
答案 3 :(得分:0)
StopWatch
具有更好的精确度。