版權(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