我有一个非常具体的问题,我需要回答一个非常具体的性能测试。我将简化代码,使其更易于理解。
我做了很多计算(几千万),都是在循环中完成的,这些循环本身不太长,我需要总计算时间。然而,所有的计算并不是一个接一个地直接完成的,而且在每个循环中都有一些额外的代码“介于两者之间”。
我需要的是所有循环的总时间(包括声明和初始化 i、递增它以及与 exmaple 中的 100 进行比较)。为了测量时间,我在每个循环之前直接启动一个秒表
,并在循环之后直接停止它。但这两项行动是否需要一些可能相关的时间?
示例:
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();
当然,如果所有的循环都一个接一个地直接完成并不重要,我可以只在第一个循环的开头开始并在最后一个循环的结尾停止,但这里是不可能的。
我知道这个问题非常具体,但我希望有人能在这里帮助我,因为来自大约五千万个循环的重要时间可能会以某种方式影响我的结果。
最佳答案
What I need, is quite exactly the total time of all loops. To measure the time I start a StopWatch directly before every loop and stop it directly after the loop. But do those two actions need some time that might be relevant?
它们需要一些时间——i
的初始化、增量以及每次循环迭代中与 100 的比较也是如此。在计算中几乎没有什么是瞬时的。
是否相关是另一回事。除非您的计算完全微不足道,否则这不太可能对您的时间安排产生重大影响。您可以尝试对空循环计时,但 JIT 编译器可能会完全摆脱循环本身。
关于c# - 启动和停止秒表需要一些时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13443287/