对于那些对我如何进行基准测试感兴趣的人,请看这里,我在“Loop 1K”方法的构建附近简单地替换/添加了几个方法。
对不起,我忘了说我的测试环境。.Net 4.5 x64(不要选择 32 位首选)。在 x86 中,这两种方法都需要 5 倍的时间。
Loop2
需要 3 倍的时间Loop
。我认为x++
/变大x+=y
时不应该放慢速度x
(因为无论如何都需要 1 或 2 个 cpu 指令)
是因为参考的地方吗?但是我认为在Loop2
变量不多的情况下,它们应该都彼此接近...
public long Loop(long testSize)
{
long ret = 0;
for (long i = 0; i < testSize; i++)
{
long p = 0;
for (int j = 0; j < 1000; j++)
{
p+=10;
}
ret+=p;
}
return ret;
}
public long Loop2(long testSize)
{
long ret = 0;
for (long i = 0; i < testSize; i++)
{
for (int j = 0; j < 1000; j++)
{
ret+=10;
}
}
return ret;
}
更新:如果有的话,循环展开何时仍然有用?有用