测试Unity版本为2018.2.21f1
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ForeachTest : MonoBehaviour
{
private const int ELEMENT_COUNT = 10;
private int[] mTestArray = new int[ELEMENT_COUNT];
private List<int> mTestList = new List<int>();
private ArrayList mTestArrayList = new ArrayList();
private Dictionary<int, string> mTestDictionary = new Dictionary<int, string>();
void Start()
{
for (int i = 0; i < ELEMENT_COUNT; ++i)
{
mTestArray[i] = i;
mTestList.Add(i);
mTestList.Add(i);
mTestDictionary.Add(i, i.ToString());
}
}
void Update()
{
TestArrayForeach();
TestListForeach();
TestArrayListForeach();
TestDictionaryForeach();
}
public void TestArrayForeach()
{
for (int i = 0; i < 1000; ++i)
{
foreach (var item in mTestArray)
{
}
}
}
public void TestListForeach()
{
for (int i = 0; i < 1000; ++i)
{
foreach (var item in mTestList)
{
}
}
}
public void TestArrayListForeach()
{
for (int i = 0; i < 1000; ++i)
{
foreach (var item in mTestArrayList)
{
}
}
}
public void TestDictionaryForeach()
{
for (int i = 0; i < 1000; ++i)
{
foreach (var item in mTestDictionary)
{
}
}
}
}
结论 :Array,List,Dictionary的foreach操作都不会产生GC,只有ArrayList会产生GC