0

我对 .net 框架中的 Stopwatch 类有疑问。我想测量循环迭代所花费的时间(游戏中的时间)

Stopwatch timer = new Stopwatch();
timer.Start(); // Edited this in, forgot about that
while(true)
{
    var timespan = timer.Elapsed;
    timer.Restart();
    // do something with the timespan

    // Do some work here
}

我担心在测量和重新启动之间可能会发生上下文切换,并且会丢失一些“时间”。有谁知道以原子方式测量和重新启动计时器的方法?

编辑:也欢迎没有秒表的解决方案

4

2 回答 2

0

您不必重新启动计时器。您可以只记住变量中 Elapsed 的最后测量值,然后始终取差值。类似的东西(你还必须照顾第一次迭代):

Stopwatch timer = new Stopwatch();
var lastElapsed = timer.Elapsed;
while(true)
{
    var newLastElapsed = timer.Elapsed;
    var timespan = newLastElapsed - lastElapsed;
    lastElapsed = newLastElapsed;
    // do something with the timespan

    // Do some work here
}

但是,您为什么关心在测量 Elapsed 和重新启动计时器之间经过了一段时间?您是否对仅测量“在这里做一些工作”部分感兴趣,或者也测量“用时间跨度做某事”部分?

于 2013-06-19T03:20:36.577 回答
0
Stopwatch timer = new Stopwatch();
timer.Start();
var previous = timer.elapsed;
while(!done)
{
    var current = timer.Elapsed;
    var elapsed = current - previous;
    previous = current;
    // use elapsed
    // do the rest of your work
}

抱歉格式化,当我在一台真正的电脑上时我会修复它。

于 2013-06-19T03:22:16.577 回答