性能优化-对象池

作者: 齊葩 | 来源:发表于2017-01-17 22:36 被阅读75次

    举一个例子,有一个场景里有一堆怪物,你需要把这堆怪物保持在一定数量区间内(15-20)来供玩家攻击。每隔几秒生成一个怪物但不能超过20个,如果少于15个则立即生成。

    有些人可能缺怪物的时候就new一个,怪物被打死的时候就直接delete掉。这就导致了频繁的申请和释放内存,这样做的效率是很低的。

    高效的解决方案就是创建一个怪物的对象池。因为对象池会保存你创建出来的对象并且重复使用它,上述例子里如果使用对象池最多只会new20次,并且不会delete。效率自然就上去了。

    下面介绍一下对象池。

    1:对象池一般有会两个链表。一个是idle链表,一个是busy链表(就是创建一个类,里面有两个链表)。

    2:对外的接口一般有取出对象和回收对象两个。

    3:当你调用取出接口的时候,对象池会从idle里面拿出来一个返回给你并且把这个对象从idle里面删除掉添加到busy里。如果对象池发现idle是空的,对象池就会创建一个对象。然后把对象反给你并且把对象添加到busy里。

    4:当你调用回收接口的时候(注意把你要回收的对象传进去),对象池会把要回收的对象放到idle里并且从busy里移除掉。

    这就是简单的对象池。看上去是不是很简单?但是你要重置对象池里对象的数据还是很难控制的。

    点击这里可以看到作者的其他文章

    欢迎转载,转载请标明出处

    相关文章

      网友评论

        本文标题:性能优化-对象池

        本文链接:https://www.haomeiwen.com/subject/ujrvbttx.html