用了NodePool 预生成100个带物理刚体的对象,然后调用的时候生成80个,和直接实例化预制体80个对比,用对象池卡顿更明显了,帧数最低降到了30帧,直接实例化帧数还能保持在40帧以上,这是什么原因,是用对象池的时候多了一个判断,判断对象池里有没有空闲的可用节点造成的吗?但是这个就是这样的用法啊,不判断不行。
判断应该不会,创建销毁对象的时候会影响性能,用对象池的时候不要一下预先生成所有,用到的时候使用,不然和不用有什么区别,对象池是重复利用对象,避免过多创建销毁对象。
不会的,就算你预生成所有,也是先进先出。用完的还回去,下次会优先用已经用过的。只是生成过多,会浪费内存,后面的永远用不到。
较劲啊兄弟,都说了,重复利用对象,避免过多创建销毁对象。你预生成过多对象,已经影响性能占内存了,对象池就没有意义了,你再说什么重复利用原理啊,重复利用就是避免创建更多,减少内存最大占用,减少创建销毁。
楼主说的预生成100个,调用的时候生成80个,不知道啥操作,根据帧数,应该100是创建对象,比较也没有意义。30帧是因为创建了100个对象,40帧是因为创建了80个对象。楼主对 对象缓存池,理解可能有误。
其实就是节省了new 和del的动作
好的,对不起
共同学习 ,我说的也不一定对,但气势要有
1赞
对象池预生成100个是在游戏开始的时候,不影响后面的对比,卡的是后面从对象池取出80个的时候,和直接实例化80个做对比,所以数量上是一样多的。可能也和物理碰撞有关系,因为生成点是同个位置,个体和个体之间有物理碰撞也影响性能,但是搞不懂的是实例化也是同样的方式生成,为什么还会流畅一点。
你用对象池生成的,和直接实例化预制体生成的,内部代码是一样的。你用对象池根本没有缓存复用的过程,你这对比有什么意义啊,当然,也不是很好对比。你应该去多了解一下对象缓存池.