自身以前也写过cocos2d-x如何优化内存的应用,以及内存不够的情况下怎么样处置惩罚游戏。今天在微博中看到有友好简介了下内存,挺详细的。不晓得是谁写的,我纪录下。

一,IOS与图片内存
在IOS上,图片会被积极缩放到2的N次方大小。例如一张1024*1025的图片,占用的内存与一张1024*2048的图片是一致的。图片 占用内存大小的共计的公式是;长*宽*4。何等一张512*512 占用的内存即是 512*512*4 = 1M。其他尺寸以此类推。(ps:IOS上支持的最大尺寸为2048*2048)。
二,cocos2d-x 的图片缓存
Cocos2d-x 在机关一个精灵的时辰会运用spriteWithFile或者spriteWithSpriteFrameName等 岂论用哪类方式,cocos2d-x都会将这张图片加载到缓存中。若是是第一次加载这个图片,那就会先将这张图片加载到缓存,往后从缓存读取。假如缓存中 已经存在,则直接从缓存中提取,免去了加载进程。
图片的缓存主要由下列两个类来措置:CCSpriteFrameCache, CCTextureCache
CCSpriteFrameCache加载的是一张拼接过的大图,每个小图只不过大图中的一个地域,这些地域信息都在plist文件中生存。用的时辰只重要根据小图的称号便可以加载到这个区域。
CCTextureCache 是寻常的图片缓存,我们所有直接加载的图片都会默许放到这个缓存中,以行进挪用听从。
因而,每次加载一张图片,或者颠末plist加载一张拼接图时,都会将整张图片加载到内存中。假设不去监禁,那就会一直占用着。
三,渲染内存。
不要认为,合计内存时,只算计加载到缓存中的内存便可以了。以一张1024*1024的图片为例。
CCSprite *pSprite = CCSprite::spriteWithFile("a.png");
挪用上边这行代码之后,可以在LEAKS东西中看到,增多了大概4M的内存。而后接着调用
addChild(pSprite);
这时,内存又增进了4M。也便是,一张图片,若是必要渲染的话,那它所占用的内存将要X2。
再看看经过plist加载的图片,例如这张大图尺寸为2048*2048。想要加载此中的一张32*32的小图片
CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("b.plist");
此时内存增加16M (汗)
CCSprite *pSpriteFrame = CCSprite::spriteWithSpriteFrameName("b1.png");
b.png 大小为32*32 ,想着也便是增进一点点内存,可实践情况是增长16M内存。也就是只有渲染了此中的一局部,那末整张图片都要一块儿被加载。
但是环境不是那末的糟糕,这些曾经渲染的图片,假定再次加载的话,内存是不会再持续抬高的,比方又添加了100个b.plist的另一个区域,图片内存照旧共增加16+16 = 32M,而不会继续上升。
四,缓存禁锢
假定游戏有不少场景,在切换场景的时刻可以把前一个场景的内存所有开释,预防总内存过高.
CCTextureCache::sharedTextureCache()->removeAllTextures(); 拘留到今朝为止所有加载的图片
CCTextureCache::sharedTextureCache()->removeUnusedTextures(); 将引用计数为1的图片开释掉CCTextureCache::sharedTextureCache()->removeTexture(); 单独囚系某个图片
CCSpriteFrameCache 与 CCTextureCache 监禁的门径差不久不多。
值得留神的是扣留的机缘,多在切换场景的时刻禁锢资本,假定从A场景切换到B场景,调用的函数顺序为B::init()---->A::exit()---->B::onEnter() 。
可若是使用了切换效果,譬如CTransitionJumpZoom::transitionWithDuration这样的函数,则函数的挪用顺序酿成B::init()---->B::onEnter()---->A::exit() 。
而且第二种方式会有一刹时将两个场景的利润叠加在一起,若是不采用偏激,很可能会由于内存短促而瓦解。
无心强逼监管悉数资源时,会使某个正在履行的动画取得引用而弹出异常,可以挪用CCActionManager::sharedManager()->removeAllActions();来解决。
五,内存优化
优化的心得等于只管即便去拼接图片,使图片边长尽可能的保持2的N次方况且装的很满。但要寄望,有逻辑相干的图片只管即便打包在一张大图里,其 他一点就是打包的时辰要思考到层的漫衍。由于为了渲染依顺可能会用到CCSpriteBatchNode;对立个BatchNode里的图片凡是位于一个 层级的,是以必须根据各个图片的层级关系,打包到不合的plist里。偶尔内存与依顺不成以兼得,只能只管即便失调了。
六,其他
最后附一个各代IOS设施的内存制约环境
设备                                              倡议内存                   最大内存
iPad2/iPhone4s/iphone4                170-180mb                 512mb
iPad/iPod touch3,4/iphone3gs          40-80mb                  256mb
iPod touch1,2/iPhone3g/iPhone1         25mb                    128mb
上述提倡内存只不过一些人自己测试的事实,可用的RAM不大于最大内存的一半,如果挨次逾越最大内存的一半,则可能会挂掉。
其他在LEAKS里查抄模拟器中与真机总的内存,会有较大收支。在摹拟器中的终归与实践更接近一些。

转载于:https://www.cnblogs.com/flying_bat/archive/2013/04/14/3020798.html

[zz]cocos2d-x如何优化内存的应用相关推荐

  1. 谷歌发布 Android 8.1 首个开发者预览版,优化内存效率

    今晨,谷歌推出了 Android 8.1 首个开发者预览版,此次升级涵盖了针对多个功能的提升优化,其中包含对 Android Go (设备运行内存小于等于 1 GB)和加速设备上对机器学习的全新神经网 ...

  2. iOS 使用Instruments优化内存性能

    iOS 使用Instruments优化内存性能 问题 项目中使用到图片合成视频,发现内存增长十分的迅速,导致一些因为内存引起的问题,本文使用这个案例,结合Instruments工具检测和分析问题,最终 ...

  3. 【Linux 内核 内存管理】优化内存屏障 ③ ( 编译器屏障 | 禁止 / 开启内核抢占 与 方法保护临界区 | preempt_disable 禁止内核抢占源码 | 开启内核抢占源码 )

    文章目录 一.禁止 / 开启内核抢占 与 方法保护临界区 二.编译器优化屏障 三.preempt_disable 禁止内核抢占 源码 四.preempt_enable 开启内核抢占 源码 一.禁止 / ...

  4. Android性能优化 - 内存优化

    性能优化系列阅读 Android性能优化 性能优化 - 消除卡顿 性能优化- 内存优化 性能分析工具 - TraceView Android性能分析工具 为什么内存优化? 在一个商业项目中,很有可能因 ...

  5. JavaScript内存管理——优化内存占用

    使用具备垃圾收集机制的语言编写程序,开发人员一般不必操心内存管理的问题.但是,JavaScript在进行内存管理及垃圾收集时面临的问题还是有点与众不同.其中最主要的一个问题,就是分配给Web浏览器的可 ...

  6. 攻防实战:如何检测或优化内存中的.NET Tradecraft

    概述 对于红队的攻击操作来说,使用内存中的Tradecraft所起到的效果变得越来越大,这主要是由于EDR不断进行功能改进,已经使越来越多的蓝队获得了监测运行中内存的能力. 此前,我们曾经讨论过将混淆 ...

  7. Android 性能监测工具,优化内存、卡顿、耗电、APK的方法

    导语     安卓大军浩浩荡荡,发展已近十个年头,技术优化月新日异,如今 Android 9.0 代号P  都发布了,Android系统性能已经非常流畅了.但是,到了各大厂商手里,改源码自定系统,使得 ...

  8. TWAIN扫描识别工具Dynamic Web TWAIN发布v13.3,优化内存、扫描模块

    Dynamic Web TWAIN 是一个专为Web应用程序设计的TWAIN扫描识别控件.你只需在TWAIN接口写几行代码,就可以用兼容TWAIN的扫描仪扫描文档或从数码相机/采集卡中获取图像.然后用 ...

  9. 如何优化cocos2d/x程序的内存使用和程序大小

    评论(9) 收藏 举报 目录(?)[+] 本站文章均为 李华明Himi 原创,转载务必在明显处注明: 转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/ip ...

最新文章

  1. 改进量子计算机的三项创新
  2. Oracle RAC环境下如何更新patch(Rolling Patch)
  3. MongoDB使用小结:一些常用操作分享
  4. 如何设置多个图层层叠关系_凉山车载式叠螺污泥脱水机_山东领旗环保科技
  5. 【错误记录】Flutter 构建报错 ( Error: Method not found: ‘CupertinoModalPopupRoute‘. | 下载最新 Flutter SDK 版本 )
  6. information_schema.character_sets 学习
  7. 惊现漏洞门!大众汽车被曝安全风险,1分钟内即可轻易解锁
  8. Adobe 2022软件安装错误代码107解决办法
  9. Mybatis Interceptor 拦截器
  10. Python--Json数据简单解析(11.18)
  11. Bzoj4199:[NOI2015]品酒大会
  12. BeX5安装遇到问题
  13. mac下的c语言程序开发,mac VS Code配置C语言开发环境(小白简单Clang版)
  14. win7 linux ssh key,Windows下创建SSH Key并登录Linux服务器
  15. 什么是闭包?闭包有啥作用?闭包的应用有啥?内存优化?
  16. AGM FPGA与CPLD烧录说明
  17. Java爬虫——人人网模拟登录
  18. Linux学习-21-yum命令(查询、安装、升级和卸载软件包)和软件组管理
  19. WebSphereMQ 报错代码 查询
  20. 摩托车E 绕桩技巧 半坡起步技巧 过单边桥技巧

热门文章

  1. 遇到事情不计较就是善待自己
  2. 如何选择自己适合的引流平台?
  3. 如何看待0.5元可买到身份匹配的人脸数据?
  4. Qt——P1 创建第一个Qt程序
  5. Java-Eclipse快捷键汇总
  6. 计算机网络class 3(速率的相关性能指标)
  7. 利用iptabls的NFLOG记录自己的HTTP HTTPS上网行为
  8. sql stuff 函数_SQL STUFF函数概述
  9. sql server死锁_SQL Server死锁定义和概述
  10. ssas表格模型 权限控制_Analysis Services(SSAS)表格模型中的时间智能