user3488765 user3488765 - 25 days ago 15
C# Question

Why is a condition in a for-loop initialisation faster than inside the loop?

I'm doing a bit of optimization and found out that this:

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


takes more than twice as long to run as this:

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

}
}


What is going on here?

The purpose is avoiding diagonal(-1,-1; -1,1 ...) and the origin(0,0) fields

Answer

The second code ends the inner loop when ((x * x) ^ (y * y)) != 1, whereas the first code only skips one iteration of the inner loop. Since they don't do the same thing, all bets are off on comparing performance.

Comments