2017-04-01 36 views
0
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建议使用'for each loop syntax'来获得更好的性能。但另一方面,该文章说,对于使用JIT的设备使用零()或两个(),而零()是最慢的设备没有任何区别。对于Libgdx中的Array Datatype,哪种循环语法最快?

我还发现不推荐使用two()但是one()的文章,因为每个循环的a可能会产生垃圾。

我想知道什么是最好的迭代通过LibGDX阵列数据类型的所有元素。

这里有一些文章: https://github.com/libgdx/libgdx/wiki/Collections https://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/utils/Array.html

我仍然不解

回答

1

two()在我看来是更好的选择。

Libgdx数组经过优化,尽可能避免垃圾回收。他们在很多方面都这样做。

  1. 一种方法是您已经指出的一种方法,通过尽可能避免内存副本。

  2. 重复使用迭代器。

  3. 使用IntArray,避免与ArrayList发生的装箱。