缓存池是为了减少C#内存回收的次数构造的结构。在gameobject暂时不使用的时候,用进入入缓存池的方式来替代销毁,减少GC次数。
如果对gameobject分类存入缓存池的话,我们需要构造出保存每一类gameobject的容器:ObjList
然后让缓存池作为ObjList的容器(我们使用字典保存)。这样一个缓存池基本的容器结构就明了了。
简单画一下缓存池的类图:

这里只列出最关键的方法和属性。我们可以看出,有容器,以及从容器中取出和放回的方法,就能得到一个缓存池。
实现
ObjList的实现:
一、ObjList.GetObj()方法,应该把对象取出,并设置为active,并在内部的List容器内移除
二、ObjList.PushPool()方法应该把对象保存到list容器内,并设置active为false,作为优化,可以在加入缓存池的时候,分类设置父物体,方便管理。

BufferPoolManager的实现:
一、缓存池在整个项目中应该只有一个,需要实现一个单例模式
二、GetObj 方法除了对objList的调用,在list容器内没有实例的时候,应该完成实例的初始化。

三、Push方法除了对objList的调用,在objList容器不存在的时候,应该完成容器的初始化。
四、ClearPool应该清空bufferPool,作为优化,可以写一个方法按照某种规则定期清理缓存池,以优化内存。
