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

C# 为什么for循环中的条件初始化比循环内的条件快?,c#,optimization,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

我正在进行一些优化,发现:

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++)
{
对于(int y=-1;y<2;y++)
{
如果((x*x)^(y*y))!=1)
{
继续;
}
}
}
运行所需时间是此时间的两倍以上:

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

    }
}
for(int x=-1;x<2;x++)
{
对于(int y=-1;y<2&((x*x)^(y*y))==1;y++)
{
}
}
这是怎么回事


其目的是避免对角线(-1,-1;-1,1…)和原点(0,0)字段

((x*x)^(y*y))!=1
,而第一个代码只跳过内部循环的一次迭代。因为它们做的事情不一样,所以所有的赌注都放在性能比较上。

((x*x)^(y*y))!=1
,而第一个代码只跳过内部循环的一次迭代。因为它们做的事情不同,所以所有的赌注都放在性能比较上。

你是如何测试的?@Steve连续10次将两个版本都运行了1亿次。调试模式定时测试最好使用已启用优化的发布版本,而不是使用调试器,因为最终这才是最重要的。您是如何测试它的?@Steve连续10次将两个版本运行了1亿次。调试模式定时测试最好使用带优化的发布版本,而不是使用调试器,因为最终这才是最重要的。