首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >产生闪电效应

产生闪电效应
EN

Code Review用户
提问于 2015-01-27 22:41:47
回答 3查看 241关注 0票数 2

哪一种更适合记忆?

代码语言:javascript
复制
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);

        // ,,,
    }
    //...
}
代码语言:javascript
复制
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之前或内部声明变量吗?这有什么不同吗?

EN

回答 3

Code Review用户

回答已采纳

发布于 2015-01-28 06:35:07

您的两个版本可能会生成相同的IL代码。请参阅:https://stackoverflow.com/a/7383090/2655508

第一个版本更好,因为您应该尽可能地声明变量的用法。

你不应该缩短变量名。您已经拥有了positions[],那么为什么要使用pos而不是position呢?

您的代码中有一些神奇的数字,这些数字应该被提取到一些有意义名称的常量中。

票数 6
EN

Code Review用户

发布于 2015-01-28 06:21:40

我个人会用第二个。第一个创建、分配和破坏.Count时间,而第二个创建、创建1次、分配.Count时间和破坏一次。

现在编译器可能会对其进行优化,但也可能不会。

第一种方法的好处是把所有的东西都控制得更好,但是我认为在循环之后,没有更多的事情要做,所以这些变量在任何情况下都不会存在很长时间。

票数 3
EN

Code Review用户

发布于 2015-01-28 10:38:14

第一种方法:

  • 本地化变量的作用域。
  • 维修性

第二种方法:

  • 性能(虽然微不足道)是因为分配和初始化。
  • 为循环的每次运行创建和销毁对象。

读得好:https://weblogs.java.net/blog/2006/08/21/declare-variables-inside-or-outside-loop

略为优化:

代码语言:javascript
复制
  (length * Jaggedness) // Extract it out of the loop into a constant or temp variable.

  float displacement = Rand(-Sway, Sway); // out of the loop.

这肯定会增加比上述方法更可计算的延迟差异:)

票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/78815

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档