Unity3D教程:尽可能避免使用foreach

Unity3D教程:尽可能避免使用foreach

Posted on 2013年04月17日 by U3d / Unity3D 基础教程 /被围观 425 次html

* 版权声明:转载时请以超连接形式标明文章原始出处和做者信息express

* 本文来自:Unity3D 教程手册数组

* 本文连接: http://www.manew.com/4143.htmlide

为何要尽可能避免使用foreach。GC Alloc是形成Unity游戏偶尔卡帧的罪魁祸首。第一个循环大概会形成2.3K的GC Alloc。第二个循环则没有任何GC Alloc。因此,不要途方便,处处哪都用foreach循环。this

foreach 语句为数组或对象集合中的每一个元素重复一个嵌入语句组。foreach 语句用于循环访问集合以获取所需信息,但不该用于更改集合内容以免产生不可预知的反作用。此语句的形式以下:3d

foreach (type identifier in expression) statementcode

其中:htm

type对象

identifier 的类型。教程

identifier

表示集合元素的迭代变量。若是迭代变量为值类型,则没法修改的只读变量也是有效的。

expression

对象集合或数组表达式。集合元素的类型必须能够转换为 identifier 类型。请不要使用计算为 null 的表达式。

而应计算为实现 IEnumerable 的类型或声明 GetEnumerator 方法的类型。在后一种状况中,GetEnumerator 应该要么返回实现 IEnumerator 的类型,要么声明 IEnumerator 中定义的全部方法。

statement

要执行的嵌入语句。

举一个代码列子:

 

      
01
using UnityEngine; 
02
using System.Collections;
03
 
04
public class ForeachTest : MonoBehaviour {
05
 
06
    protected ArrayList m_array;
07
 
08
    void Start () 
09
    { 
10
        m_array = new ArrayList(); 
11
        for (int i = 0; i < 2; i++) 
12
            m_array.Add(i); 
13
    } 
14
 
15
    void Update () 
16
    { 
17
        for (int i = 0; i < 1000; i++) 
18
        { 
19
            foreach (int e in m_array) 
20
            { 
21
                //big gc alloc!!! do not use this code! 
22
            } 
23
        }
24
 
25
        for (int i = 0; i < 1000; i++) 
26
        { 
27
            for (int k = 0; k < m_array.Count; k++) 
28
            { 
29
                //no gc alloc!! 
30
            } 
31
        } 
32
    } 
33
}
相关文章
相关标签/搜索