为什么for循环初始化中的条件比循环内部更快?

时间:2016-11-07 19:26:58

标签: c# optimization

我正在做一些优化,发现这个:

for (int x = -1; x < 2; x++)
{
    for (int y = -1; y < 2 ; y++)
    {
        if (((x * x) ^ (y * y)) != 1)
        {
            continue;
        }
    }
}

运行的时间是这个的两倍多:

for (int x = -1; x < 2; x++)
{
    for (int y = -1; y < 2 && ((x * x) ^ (y * y)) == 1; y++)
    {

    }
}

这里发生了什么?

目的是避免对角线(-1,-1; -1,1 ......)和原点(0,0)场

1 个答案:

答案 0 :(得分:13)

第二个代码在((x * x) ^ (y * y)) != 1时结束内部循环,而第一个代码仅跳过内部循环的一次迭代。由于他们没有做同样的事情,所有的赌注都是在比较性能上。