我正在尝试对某些东西进行基准测试。
我有一个循环
for (int i = 1; i <= 1000; i++)
{
Thing thing = createThing(i);
DateTime startTime = DateTime.Now;
thing.ComputationallyExpensiveOp();
TimeSpan elapsed = DateTime.Now - startTime;
Console.WriteLine(String.Format("i = " + i + "\ttime = " + elapsed.TotalMilliseconds);
}
看起来第一次迭代i = 1花费的时间比它应该花费的时间长得多(几个数量级),这取决于其他迭代需要多长时间才能完成。
第二次迭代似乎也经常太长,尽管不那么明显。
我觉得这是因为循环导致缓存了很多值,这些值在第一次迭代中没有设置。
有没有一种方法可以使第一次迭代i = 1与其余迭代一样“快速”(在开销方面),这样我真的只是在计时(尽可能最好)thing.ComputationallyExpensiveOp()。
目前很明显,第一次迭代并不能准确反映thing.ComputationallyExpensiveOp().
我已经尝试在循环上方移动“预热”初始化,但这没有用。
Thing thing = createThing(1);
thing.ComputationallyExpensiveOp();
for (int i = 1; i <= 1000; i++)
{
thing = createThing(i);
DateTime startTime = DateTime.Now;
thing.ComputationallyExpensiveOp();
TimeSpan elapsed = DateTime.Now - startTime;
Console.WriteLine(String.Format("i = " + i + "\ttime = " + elapsed.TotalMilliseconds);
}
三国纷争
临摹微笑
相关分类