2017-04-01 38 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發生的裝箱。