Unity3D教程:盡量避免使用foreach


Unity3D教程:盡量避免使用foreach

Posted on 2013年04月17日 by U3d / Unity3D 基礎教程 /被圍觀 425 次

* 版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息

* 本文來自:Unity3D 教程手冊

* 本文鏈接: http://www.manew.com/4143.html

為什么要盡量避免使用foreach。GC Alloc是造成Unity游戲偶爾卡幀的罪魁禍首。第一個循環大概會造成2.3K的GC Alloc。第二個循環則沒有任何GC Alloc。所以,不要途方便,到處哪都用foreach循環。

foreach 語句為數組或對象集合中的每個元素重復一個嵌入語句組。foreach 語句用於循環訪問集合以獲取所需信息,但不應用於更改集合內容以避免產生不可預知的副作用。此語句的形式如下:

foreach (type identifier in expression) statement

其中:

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
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM