Should I use Pools for particles if i forced to re-init every particle every time i create them

一曲冷凌霜 提交于 2020-01-02 06:27:14

问题


I am creating a particle system in XNA4 and I've bumped into problem. My first particle system was a simple list of particles, whose instances are created when needed. But then I read about using pools.

My second system consists of a pool, filled with particles, and an emitter/controller. My pool is pretty basic, this is the code:

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;
    }
}

The problem is pool system is much more hungry for CPU. Every time I take out particle from pool to my emitter I'm forced to re-initialize and reset particles, due the constructor absence and this is a problem.

Is there any point at using pools, if I re-init those particles or I should leave pools for arrays of completely identical objects that never changes?


回答1:


In an XNA application, typically object pooling isn't supposed to speed up initialization. It is to speed up garbage collection. The GCs on consoles are slower, and in a game where your entire update function has 16 milliseconds to run, a collection pause can be visibly noticeable. This may or may not a concern for your particular case, especially if this is a PC application, depending on the number and lifetimes of particles you are using.



来源:https://stackoverflow.com/questions/14387615/should-i-use-pools-for-particles-if-i-forced-to-re-init-every-particle-every-tim

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!