如果我每次创建它时都被迫重新启动每个粒子,我是否应该使用Pools作为粒子

edw*_*ing 4 c# xna memory-management pool particle-system

我正在XNA4中创建一个粒子系统,但我遇到了问题.我的第一个粒子系统是一个简单的粒子列表,其实例是在需要时创建的.但后来我读到了使用池.

我的第二个系统包括一个充满粒子的池和一个发射器/控制器.我的游泳池很基本,这是代码:

class Pool<T> where T: new ()
{
    public T[] pool;
    public int nextItem = 0;


    public Pool(int capacity)
    {
        pool = new T[capacity];

        for (int i = 0; i < capacity; i++)
        {
            pool[i] = new T();
        }
    }
    public T Create()
    {
       return pool[nextItem++];
    }
    public void Destroy(T particle)
    {
        pool[--nextItem] = particle;
    }
}
Run Code Online (Sandbox Code Playgroud)

问题是池系统对CPU更加饥渴.每次我从池中取出粒子到我的发射器时我都被迫重新初始化并重置粒子,因为构造函数不存在而且这是一个问题.

使用池有什么意义吗,如果我重新启动那些粒子,或者我应该为完全相同的对象的数组留下池,这些对象永远不会改变?

Jim*_*mmy 5

在XNA应用程序中,通常不应该对象池加速初始化.这是为了加快垃圾收集.控制台上的GC速度较慢,并且在整个更新功能运行16毫秒的游戏中,收集暂停可以明显地显着.这可能是或可能不是您特定情况的问题,特别是如果这是一个PC应用程序,取决于您使用的粒子的数量和生命周期.