Libgdx中哪种循环语法对于Array数据类型最快?

时间:2017-04-01 02:07:37

标签: arrays performance loops foreach libgdx

public void zero() {
    int sum = 0;
    for (int i = 0; i < mArray.length; ++i) {
        sum += mArray[i].mSplat;
    }
}

public void one() {
    int sum = 0;
    Foo[] localArray = mArray;
    int len = localArray.length;

    for (int i = 0; i < len; ++i) {
        sum += localArray[i].mSplat;
    }
}

public void two() {
    int sum = 0;
    for (Foo a : mArray) {
        sum += a.mSplat;
    }
}

引用https://developer.android.com/training/articles/perf-tips.html#Loops它建议对每个循环语法使用&#39;&#39;实现更好的性能。但另一方面,文章说,对于使用JIT的设备使用零()或两()而没有任何区别,而零()是最慢的。

我还发现文章不推荐使用两个()而是一个(),因为每个循环可能会产生垃圾。

我想知道从LibGDX迭代Array数据类型的所有元素的最佳方法。

以下是一些文章: https://github.com/libgdx/libgdx/wiki/Collections https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Array.html

我仍然感到困惑

1 个答案:

答案 0 :(得分:1)

在我看来,

two()是更好的选择。

优化了Libgdx数组,以尽可能避免垃圾回收。他们以多种方式做到这一点。

  1. 一种方法是你已经指出的方法,尽可能避免使用内存副本。

  2. 重用迭代器。

  3. 使用IntArray,避免使用ArrayList进行装箱。