Unity3d 應儘量避免使用foreach
阿新 • • 發佈:2019-02-01
//拋開其他的不說,我只關注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迴圈。