哪一种更适合记忆?
protected static List<Line> CreateBolt(Vector2 source, Vector2 dest, float thickness)
{
//...
for (int i = 1; i < positions.Count; i++)
{
float pos = positions[i];
float scale = (length * Jaggedness) * (pos - positions[i - 1]);
float envelope = pos > 0.95f ? 20 * (1 - pos) : 1;
float displacement = Rand(-Sway, Sway);
displacement -= (displacement - prevDisplacement) * (1 - scale);
// ,,,
}
//...
}protected static List<Line> CreateBolt(Vector2 source, Vector2 dest, float thickness)
{
//...
float pos;
float scale;
float envelope;
float displacement;
for (int i = 1; i < positions.Count; i++)
{
pos = positions[i];
scale = (length * Jaggedness) * (pos - positions[i - 1]);
envelope = pos > 0.95f ? 20 * (1 - pos) : 1;
displacement = Rand(-Sway, Sway);
displacement -= (displacement - prevDisplacement) * (1 - scale);
// ,,,
}
//...
}我应该在for loop之前或内部声明变量吗?这有什么不同吗?
发布于 2015-01-28 06:35:07
您的两个版本可能会生成相同的IL代码。请参阅:https://stackoverflow.com/a/7383090/2655508
第一个版本更好,因为您应该尽可能地声明变量的用法。
你不应该缩短变量名。您已经拥有了positions[],那么为什么要使用pos而不是position呢?
您的代码中有一些神奇的数字,这些数字应该被提取到一些有意义名称的常量中。
发布于 2015-01-28 06:21:40
我个人会用第二个。第一个创建、分配和破坏.Count时间,而第二个创建、创建1次、分配.Count时间和破坏一次。
现在编译器可能会对其进行优化,但也可能不会。
第一种方法的好处是把所有的东西都控制得更好,但是我认为在循环之后,没有更多的事情要做,所以这些变量在任何情况下都不会存在很长时间。
发布于 2015-01-28 10:38:14
第一种方法:
第二种方法:
读得好:https://weblogs.java.net/blog/2006/08/21/declare-variables-inside-or-outside-loop
略为优化:
(length * Jaggedness) // Extract it out of the loop into a constant or temp variable.
float displacement = Rand(-Sway, Sway); // out of the loop.这肯定会增加比上述方法更可计算的延迟差异:)
https://codereview.stackexchange.com/questions/78815
复制相似问题