如果您对我如何进行基准测试感兴趣,请看这里,我只是在“Loop 1K”中添加/替换了几个方法。
抱歉,我忘了说我的测试环境。.Net 4.5 x64(不要选择32位),x86下两种方法的时间都要慢5倍。
Loop2
的时间比Loop
多3倍。我认为x++
/x+=y
不应该会变慢,因为无论如何都需要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;
}
更新: 循环展开在何时仍然有用? 是有用的
testSize
是多少? - astef