版權(quán)聲明:本文為博主原創(chuàng)文章,歡迎轉(zhuǎn)載。請保留博主鏈接:http://blog.csdn.net/andrewfan
上篇文章《【Unity優(yōu)化】Unity中究竟能不能使用foreach?》發(fā)表之后,曾經(jīng)有網(wǎng)友說,在他的不同的Unity版本上,發(fā)現(xiàn)了泛型List無論使用foreach還是GetEnumerator均會產(chǎn)生GC的情況,這就有點尷尬了。由于它本身就是Mono編譯器和相應(yīng).net庫才能決定的原因,這就使得在使用系統(tǒng)提供的List時,又能最終擺脫GC的糾纏變得很困難。于是抓耳撓腮,翻出差不多六七年為Java代碼寫的動態(tài)數(shù)組,然后大肆修改一番。最終好像終于逃離GC的魔咒。
先奉上代碼:
自定義的List
using System;using System.Collections;using System.Collections.Generic;using UnityEngine;namespace AndrewBox.Math { /// <summary> /// 動態(tài)數(shù)組 /// @author AndrewFan /// </summary> /// <typeparam name="T">任意類型</typeparam> public class AB_List<T> :IEnumerable<T> { protected int m_capacity=10; // 容量 protected T[] m_items;// 內(nèi)部數(shù)組 protected int m_length;// 存放的單元個數(shù) protected int m_mayIdleID;// 可能空閑的單元下標(biāo) protected IEnumerator<T>[] m_enumerators; //枚舉器組 protected bool[] m_enumStates;//枚舉器組當(dāng)前占用狀態(tài) public AB_List() &nbs