考虑以下代码片段,在执行效率方面,遍历一个 3 维单曲数组,假设process1()
和process2()
执行时间相同:
float arr[mMax,nMax,oMax];
for (m = 0; m < mMax; m++)
for (n = 0; n < nMax; n++)
for (o = 0; o < oMax; o++)
{ process1(arr[m,n,o]); }
for (o = 0; o < oMax; o++)
for (n = 0; n < nMax; n++)
for (m = 0; m < mMax; m++)
{ process2(arr[m,n,o]); }
现在,众所周知,C# 在 .NET 框架中将数组组织为行优先结构。如果没有任何优化,我会假设第一个循环将比第二个循环执行得快得多。
问题是:CLR 的 JIT 或 cs.exe/vb.exe 编译器是否会检测和优化这样的循环,可能会重新排序嵌套,或者我是否应该始终警惕潜在的性能损失,尤其是在可能发生的情况方面如果我试图并行化循环?