是否需要一些时间来启动和停止秒表?

时间:2012-11-18 18:40:00

标签: c# wpf time stopwatch

我有一个非常具体的问题,我需要回答一个非常具体的性能测试。我将简化代码,使其更容易理解。

我做了很多计算(几千万),都是在循环中完成的,这些循环本身不会太长,我需要总的计算时间。但是,所有的计算都不是一个接一个地直接进行的,而是在每个循环之间“进入”。

我需要的是所有循环的总时间(包括声明和初始化i,递增它,并在exmaple中与100进行比较)。为了测量时间,我在每个循环之前直接启动Stopwatch并在循环之后直接停止它。但这两项行动是否需要一些可能相关的时间?

示例:

Stopwatch sw = new Stopwatch();

sw.Start();
//how long does it now take until for loop is reached?
for(int i = 0; i < 100; i++)
{
    //some calculations
}
//how much time does it take to stop sw?
sw.Stop();

当然,如果所有循环一个接一个地直接完成并不重要,我可以从第一个循环的开头开始并在最后一个循环结束时停止,但这在这里是不可能的。

我知道这个问题非常具体,但我希望有人可以在这里帮助我,因为大约五千万次循环的重要时间可能会影响我的结果。

2 个答案:

答案 0 :(得分:4)

  

我需要的是所有循环的总时间。要测量时间,我会在每个循环之前直接启动StopWatch,并在循环之后直接停止它。但这两项行动是否需要一些可能相关的时间?

它们需要一些时间 - 就像i的初始化和增量,以及每次循环迭代中的100的比较一样。计算中几乎没有瞬时

是否相关是另一回事。除非你的计算完全无关紧要,否则这在你的时间安排上不大可能。您可以尝试计时一个空循环,但JIT编译器可能会完全摆脱循环本身。

答案 1 :(得分:2)

嗯,你可以尝试这个并自己检查,在我的(糟糕的表现)计算机上,第一次执行时约为0.0006毫秒,下次执行时约为0.0001毫秒。亲自尝试一下:

Stopwatch sw = new Stopwatch();
sw.Start();
sw.Stop();
TimeSpan ts = TimeSpan.FromTicks(sw.ElapsedTicks);
string elapsed = ts.TotalMilliseconds.ToString();