以下代码之间的最佳方法是什么?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;
}
的完整形式:
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;
}
或者以下它在循环外写一次:
{{1}}
C#编译器会在第一种情况下优化此操作吗?
答案 0 :(得分:1)
为什么要像第一个代码示例一样开始?第二个(不看编译器)似乎更有效。
根据Code Complete和许多其他建议:如果您不需要,请不要进行优化。
如果您需要,只需基准测试。 (关于基准测试时需要注意的内容有很多主题,博客和答案,但我相信你能找到它们:)
作为额外奖励,这里是another answer,其中包含您需要的所有链接:)
答案 1 :(得分:1)
在我看来,达到可读性和性能的最佳方法是:
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;
}
但是你可以浪费你的时间并为测试这篇文章写一些基准测试。我确信如果存在瓶颈,它将存在于代码中的另一个位置。