1. 程式人生 > >Unity3d 應儘量避免使用foreach

Unity3d 應儘量避免使用foreach

//拋開其他的不說,我只關注GC Alloc,因為這點是造成unity遊戲偶爾卡幀的罪魁禍首,舉一個程式碼例子:

using UnityEngine; 
using System.Collections;

public class ForeachTest : MonoBehaviour {

    protected ArrayList m_array;

    void Start () 
    { 
        m_array = new ArrayList(); 
        for (int i = 0; i < 2; i++) 
            m_array.Add(i); 
    } 
    
    void Update () 
    { 
        for (int i = 0; i < 1000; i++) 
        { 
            foreach (int e in m_array) 
            { 
                //big gc alloc!!! do not use this code! 
            } 
        }

        for (int i = 0; i < 1000; i++) 
        { 
            for (int k = 0; k < m_array.Count; k++) 
            { 
                //no gc alloc!! 
            } 
        } 
    } 
}

第一個迴圈大概會造成2.3K的GC Alloc(什麼事都沒做就耗費這麼多GC。。。)。

第二個迴圈則沒有任何GC Alloc。

所以,不要途方便,到處哪都用foreach迴圈。