对象缓冲池 ( cc.pool ) :

作用 :

优化创建效率 , 尤其是针对需要多次创建的情况 .

缓冲池 API :

缓冲池 ( cc.pool ) 提供的函数并不多 , 只有5个 .

cc.pool.putInPool(obj);             //将对象放入缓冲池
cc.pool.hasObject(objClass); //判断缓冲池是否存在可用的指定对象
cc.pool.removeObject(obj); //删除指定对象
cc.pool.getFromPool(objClass); //从缓冲池获取指定对象
cc.pool.drainAllPools(); //清空缓冲池

用法 :

创建一个对象类 (Hero) , 添加两个函数 , unuse 和 reuse , 重点要注意的是 , unuse 里面的 retain 方法 , 没有的话 , 对象可能会被系统回收 .

var Hero = cc.Sprite.extend({
_hp:null,
_mp:null,
ctor: function(hp,mp){
this._super("res/box.png");
this.initData(hp,mp);
}, initData: function(hp,mp){
this._hp = hp;
this._mp = mp;
}, unuse: function(){
this._hp = 0; //属性清空
this._mp = 0;
this.retain(); //保存 防止被回收
this.removeFromParent();
}, reuse: function(hp,mp){
this.initData(hp,mp);
}
});

添加创建Hero 函数 .

var CreateHero = function(hp,mp){
if(cc.pool.hasObject(Hero)) //判断缓冲池里 是否存在 Hero对象
{
cc.log('取出');
return cc.pool.getFromPool(Hero,hp,mp); // 从缓冲池里取出 Hero对象
}
else
{
cc.log('新创建');
return new Hero(hp,mp)
}
};

先预先将5000个Hero对象放入缓冲池 , 然后我将连续创建5000个Hero的总耗时 和 预先将Hero放入缓冲池再取出5000个的总耗时做一个对比 .

var HelloWorldLayer = cc.Layer.extend({
ctor:function () {
this._super();
this.preparHeroPool(); //预先将5000个Hero放入缓冲池 this.create(1); //第一轮 从对象池取出5000个
this.create(2); //第二轮 新创建5000个
}, create: function(num){ var time = new Date().getTime(); for(var i = 0; i < 5000; i++)
{
var hero = CreateHero(1,2);
hero.setPosition(cc.winSize.width/2, cc.winSize.height/2);
this.addChild(hero);
} var totleTime = new Date().getTime() - time;
cc.log("第 "+num+" 轮总耗时 = ",totleTime);
}, preparHeroPool: function(){ for(var i = 0; i < 5000; i++)
{
var node = new Hero(0,0);
cc.pool.putInPool(node);
}
}, });

结果 :

一次不能说明问题 , 再做一次测试 .

从结果上来看 , 的确是存在性能差异的 .

对象缓冲池 ( cc.pool ) :的更多相关文章

  1. 【cocos2d-js官方文档】十二、对象缓冲池

    cc.pool的使用场景 经常创建和销毁的元素,例如打飞机游戏里面的子弹等. 不适用的场景:不是很经常创建的物体,比如背景,建筑等. 如何使用cc.pool 让你的类支持cc.pool 首先,你需在需 ...

  2. Cocos Creator 对象池cc.NodePool的使用

    对象池cc.NodePool把层级管理器中的节点拖进资源管理器中就创建了预制体:let和var 一样,是声明变量的关键词, 同一个变量名时,var 即使在{}内也作用全局,let有范围:(1)将需要数 ...

  3. MySql 缓冲池(buffer pool) 和 写缓存(change buffer) 转

    应用系统分层架构,为了加速数据访问,会把最常访问的数据,放在缓存(cache)里,避免每次都去访问数据库. 操作系统,会有缓冲池(buffer pool)机制,避免每次访问磁盘,以加速数据的访问. M ...

  4. 【大白话系统】MySQL 学习总结 之 缓冲池(Buffer Pool) 的设计原理和管理机制

    一.缓冲池(Buffer Pool)的地位 在<MySQL 学习总结 之 InnoDB 存储引擎的架构设计>中,我们就讲到,缓冲池是 InnoDB 存储引擎中最重要的组件.因为为了提高 M ...

  5. 【大白话系统】MySQL 学习总结 之 缓冲池(Buffer Pool) 如何支撑高并发和动态调整

    如果大家对我的 [大白话系列]MySQL 学习总结系列 感兴趣的话,可以点击关注一波. 一.上节回顾 在上节< 缓冲池(Buffer Pool) 的设计原理和管理机制>中,介绍了缓冲池整体 ...

  6. go语言学习--go的临时对象池--sync.Pool

    一个sync.Pool对象就是一组临时对象的集合.Pool是协程安全的. Pool用于存储那些被分配了但是没有被使用,而未来可能会使用的值,以减小垃圾回收的压力.一个比较好的例子是fmt包,fmt包总 ...

  7. Golang 临时对象池 sync.Pool

    Go 1.3 的sync包中加入一个新特性:Pool.官方文档可以看这里http://golang.org/pkg/sync/#Pool 这个类设计的目的是用来保存和复用临时对象,以减少内存分配,降低 ...

  8. [译]Unity3D内存管理——对象池(Object Pool)

    原文地址:C# Memory Management for Unity Developers (part 3 of 3), 其实从原文标题可以看出,这是一系列文章中的第三篇,前两篇讲解了从C#语言本身 ...

  9. go的临时对象池--sync.Pool

    作者:bigtom链接:https://www.jianshu.com/p/2bd41a8f2254來源:简书   一个sync.Pool对象就是一组临时对象的集合.Pool是协程安全的. Pool用 ...

随机推荐

  1. FastDFS常用命令

    1.启动FastDFS tracker: /usr/local/bin/fdfs_trackered %FastDFS%/tracker.conf storage: /usr/local/bin/fd ...

  2. [转]spring MultipartFile 转 File

    原文地址:https://www.jianshu.com/p/6cf99d39e170 File.createTempFile(String prefix, String suffix); 创建一个临 ...

  3. 搭建hbase1.2.5完全分布式集群

    简介 有一段时间,没写博客了,因为公司开发分布式调用链追踪系统,用到hbase,在这里记录一下搭建过程 1.集群如下: ip 主机名 角色 192.168.6.130 node1.jacky.com ...

  4. linux技巧---为各应用创建快捷方式

    linux中启动或关闭应用有时候比较麻烦,你必须cd到该应用的可执行脚本的目录中再执行该脚本,不能在任意目录下开启或关闭应用..当然,设置了环境变量path可以解决在任意目录下开启应用的问题,但是每个 ...

  5. 接口和多态都为JAVA技术的核心。

    类必须实现接口中的方法,否则其为一抽象类. 实现中接口和类相同.   接口中可不写public,但在子类中实现接口的过程中public不可省. (如果剩去public则在编译的时候提示出错:对象无法从 ...

  6. HAWQ集成Yarn HA作为资源管理服务

    一.第一步当然是配置YARN HA,这在使用ambari管理时很简单,这里不在赘述. 二.建立HAWQ的专用资源队列queue 不要手工编辑scheduler设置,最方便的当然是使用queue man ...

  7. Jmeter在非GUI环境下传递参数(命令行&Jenkins配置)

    https://www.cnblogs.com/kill0001000/p/8078686.html 通过cmd运行 jmeter -? 可以得到所有命令行选项(本文最后) 其中可以看到下面 -J 的 ...

  8. [pig] pig 基础使用

    1.pig运行模式 本地模式: pig -x local 直接访问本地磁盘 集群模式: pig  或者 pig -x mapreduce 2.pig latin 交互 帮助信息 help 上传本地文件 ...

  9. 24访问者模式Visitor

    一.什么是访问者模式 Visitor模式也叫访问者模式,是行为模式之一 ,它分离对象的数据和行为,使用Visitor模式, 可以不修改已有类的情况下,增加新的操作. 二.访问者模式的应用示例 比如有一 ...

  10. Spring 注入枚举数组

    在spring的配置文件xml中 示例: <!--注入枚举数組--> <bean id="writeMapNullValue" class="org.s ...