- //抛开其他的不说,我只关注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循环。