C#编译器会在循环中优化此操作吗?
以下代码中C#编译器会在循环中优化此操作吗?,c#,compiler-optimization,C#,Compiler Optimization,以下代码中verticesInnerSides.Length/2每次都以完整的形式编写,最好的方法是什么: for (int i = 0; i < verticesRoof.Length; i++) { verticesInnerSides[i * NB_VERTICES + verticesInnerSides.Length / 2] = startInside; verticesInnerSides[i * NB_VERTICES + verticesInnerSide
verticesInnerSides.Length/2
每次都以完整的形式编写,最好的方法是什么:
for (int i = 0; i < verticesRoof.Length; i++) {
verticesInnerSides[i * NB_VERTICES + verticesInnerSides.Length / 2] = startInside;
verticesInnerSides[i * NB_VERTICES + verticesInnerSides.Length / 2 + 1] = startInside + Vector3.up * HEIGHT_ROOF;
verticesInnerSides[i * NB_VERTICES + verticesInnerSides.Length / 2 + 2] = endInside;
verticesInnerSides[i * NB_VERTICES + verticesInnerSides.Length / 2 + 3] = endInside + Vector3.up * HEIGHT_ROOF;
}
for(int i=0;i
或者在循环外写入一次以下内容:
myCalculatedVar = verticesInnerSides.Length / 2;
for (int i = 0; i < verticesRoof.Length; i++) {
verticesInnerSides[i * NB_VERTICES + myCalculatedVar] = startInside;
verticesInnerSides[i * NB_VERTICES + myCalculatedVar + 1] = startInside + Vector3.up * HEIGHT_ROOF;
verticesInnerSides[i * NB_VERTICES + myCalculatedVar + 2] = endInside;
verticesInnerSides[i * NB_VERTICES + myCalculatedVar + 3] = endInside + Vector3.up * HEIGHT_ROOF;
}
myCalculatedVar=verticesInnerSides.Length/2;
对于(int i=0;i
在第一种情况下,C#编译器会优化此操作吗
作为额外的奖励,这里有您需要的所有链接:)在我看来,达到可读性和性能的最佳方法是:
myCalculatedVar = verticesInnerSides.Length / 2;
for (int i = 0; i < verticesRoof.Length; i++) {
int ind = i * NB_VERTICES + myCalculatedVar;
verticesInnerSides[ind] = startInside;
verticesInnerSides[ind + 1] = startInside + Vector3.up * HEIGHT_ROOF;
verticesInnerSides[ind + 2] = endInside;
verticesInnerSides[ind + 3] = endInside + Vector3.up * HEIGHT_ROOF;
}
myCalculatedVar=verticesInnerSides.Length/2;
对于(int i=0;i
但是,您可以浪费时间编写一些基准测试来测试这篇文章。我确信,如果存在瓶颈,它将出现在代码中的另一个位置。为什么希望编译器为您优化它,而不是在一开始就正确地编写它?打开ILDSM并自己检查
您似乎正在使用并行阵列反模式。请考虑使用对象和OOP。@ ViNex.n,在CLR层应用的大多数优化,而不是C语言到IL编译(例如方法内联)。我不同意成熟的优化“是万恶之源”的传统智慧。大多数优化都是免费的(就像这样)。它们是显而易见的,并且可以提高可读性、可维护性和安全性。您只需要检查或更改一个变量,而不是代码中的多个位置。如果你现在不优化,你可能永远不会优化它。如果你以后再看代码,如果你能在不引起问题的情况下修改一些东西,那就更难理解了。@TimSchmelter我完全同意可读性。代码应该写为可读。如果完成后出现性能问题,请找出问题所在,然后优化该位。否则,您可能会浪费时间,使代码更难阅读,同时可能会更慢。