【发布时间】:2015-02-06 08:20:23
【问题描述】:
下面的代码之间的最佳方法是什么,每次都以完整的形式编写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;
}
C#编译器会在第一种情况下优化这个操作吗?
【问题讨论】:
-
为什么希望编译器为您优化它而不是一开始就正确编写它?
-
打开 ILDSM 并自行检查
msdn.microsoft.com/en-us/library/aa309387(v=vs.71).aspx -
看来您正在使用并行阵列反模式。请考虑使用对象和 OOP。
-
@Vignesh.N,大多数优化都应用在 CLR 层,而不是 C# 到 IL 编译(例如方法内联)。