最近在做一个unity的游戏项目,自己写了一个对象池,因为涉及到对象的强制转换,所以对性能方面有所顾虑,不知道有没有更好的方法实现


using System.Collections.Generic;
public class NormalObjectPool : NormalSingleton<NormalObjectPool>
{
    private Dictionary<string, Queue<RecyleClass>> ClassPool = new Dictionary<string, Queue<RecyleClass>>();
    public T Dequeue<T>() where T : RecyleClass, new()
    {
        var queue = GetQueue<T>();
        if (queue.Count <= 0)
        {
            queue.Enqueue(new T());
        }
        return (T)queue.Dequeue();
    }
    public void Enqueue<T>(T t) where T : RecyleClass, new()
    {
        var queue = GetQueue<T>();
        queue.Enqueue(t);
    }
    public void DestoryQueue<T>() where T : RecyleClass, new()
    {
        if (ClassPool.ContainsKey(typeof(T).Name))
        {
            ClassPool.Remove(typeof(T).Name);
        }
    }
    private Queue<RecyleClass> GetQueue<T>() where T : RecyleClass, new()
    {
        if (!ClassPool.ContainsKey(typeof(T).Name))
        {
            ClassPool[typeof(T).Name] = new Queue<RecyleClass>();
        }
        return ClassPool[typeof(T).Name];
    }
}
public interface RecyleClass
{

}

你直接吧你的泛型确定为gameobject类型不就行了吗,毕竟你所有的unity对象都是gameobject类型