【发布时间】:2013-04-29 12:28:00
【问题描述】:
对于那些对我如何进行基准测试感兴趣的人,请看here,我在“Loop 1K”方法的构建附近简单地替换/添加了几个方法。
对不起,我忘了说我的测试环境。 .Net 4.5 x64(不要选择 32 位首选)。在 x86 中,这两种方法都需要 5 倍的时间。
Loop2 花费的时间是Loop 的 3 倍。我认为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;
}
【问题讨论】:
-
你应该展示你是如何设置衡量性能的。
-
和
testSize多少钱 -
可能是优化问题。在“循环”中,优化器可以安全地假设变量 p 的类型是 int 而不是 long。因此,可以使内循环中的增量更快。
-
我得到了类似的结果(但我尝试时只需要 2 倍的时间)。我用 testsize = 10000000 进行了尝试,发布版本。循环运行几次试验,使用秒表计时。
-
我刚刚用这种方法验证了stackoverflow.com/a/1048708/421143 - 这两种方法的结果相似。
标签: c# performance