本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93

一、内存优化原则

为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Texture(纹理)!它几乎占据了90%的应用内存。那么我们应该尽力去减小我们应用的纹理内存使用,否则我们的应用进程可能会被系统杀死。

为了减少内存警告,这里我们给出两个普遍的关于cocos2dx游戏内存优化的指导原则。

1)了解瓶颈,然后解决掉

什么样的纹理消耗了大部分应用的内存呢?或者说这些纹理消耗了多少内存呢?你不用去手工计算或者猜测。

这里我们正好有一个工具。它就是苹果的开发工具- Allocations & Leaks,在xcode中你长按Run按钮并且选择Profile去启动这两个工具。这里我们有个截图:

你可以使用Allocation工具去计算你应用的内存使用情况并且可以查看内存泄露情况。

你也可以用一些代码去获取游戏内存使用的一些有用的信息。

如下代码即可:

CCTextureCache::sharedTextureCache()->dumpCachedTextureInfo();

如下所示:当你调用这些代码并且在DEBUG模式运行你的游戏的时候,在你的xcode console窗口你将会看到一些格式化的log信息

Cocos2d: cocos2d: "cc_fps_images" rc=5 id=3 256 x 32 @ 16 bpp => 16 KB
Cocos2d: cocos2d: "XXX/hd/actor.pvr.ccz" rc=1059 id=4 2048 x 2048 @ 32 bpp => 16384 KB
Cocos2d: cocos2d: CCTextureCache dumpDebugInfo: 2 textures, for 16400 KB (16.02 MB)

这些log显示了纹理的名字,引用数,id,大小以及像素的bit值,最重要的是它展示了内存使用情况。如上cc_fps_images消耗了16KB,actor.pvr.ccz消耗了16M内存。

2)不要过度优化

这是一个常规的优化规则。当你进行内存优化的时候,你应当进行一下权衡。因为有时图片质量和图片内存使用情况是相反的两边。所以千万不要过度优化。

二、内存优化等级

这里我们把cocos2dx内存优化划分成三个等级。在每个等级,我们有不同观点并且策略也是有些变化。

1、cocos2dx 客户端等级

这是我们可以关心的最重要的优化等级。因为我们在cocos2dx引擎上开发游戏,引擎自己就提供了很多可选择的优化方案。在这个等级上,我们可以做的工作最多。

首先,让我们看一下纹理优化

为了优化纹理内存的使用,我们必须知道什么因素影响了内存的使用情况。

有三个因素影响了纹理的内存使用。纹理格式(压缩的还是非压缩的),颜色,大小。

我们可以使用PVR格式的纹理来减少内存使用。最被建议的纹理格式是pvr.ccz,每色的bit值越高,画面质量就约好。但是也会消费很多内存。

那么我们使用颜色深度是RGBA4444的纹理来代替RBGA8888,这将会消费一半内存。

我们也会发现大纹理也会导致内存相关的问题。那么你最好使用适度的大小。

其次,让我们做一些关于声音的事情

有三个因素影响文件内存使用。是音频文件格式,比特率,和样本率

我们最希望音频文件时mp3格式。因为它被android和ios都支持。并且它也被压缩并且硬件加速了。

你应该保证你的背景音乐文件大小在800KB一下。最简单的方式就是减少背景音乐播放时间并且重复调用。

你应该保持你的音频文件样本率在96-128kbps之间,并且比特率在44kHz就足够了。

最后,我们谈谈字体和粒子系统优化。

这里我们有两个建议:当使用BM字体显示游戏分数,在你的图片文件中选择最小的数字字符,例如:

如果你想只显示数字,你可以移除所有的字符。

粒子系统中,我们可以减少粒子数量来减少内存使用。

2、cocos2dx引擎等级

如果你不擅长OpenGLES和游戏引擎内核,你可以把这部分留个引擎开发者。如果你是一个开源游戏引擎爱好者,如果你已经做了引擎等级的一些优化,请告知引擎开发者们!

3、c++语言等级

在这个等级,我的建议就是写一些无内存泄露的代码。使用cocos2dx引擎内存管理工具并且尽最大努力避免内存泄露。

三、建议和技巧

1、一帧帧的加载游戏资源。

2、减少绘制调用。使用CCSpriteBatchNode

3、按照最大到最小的顺序的加载纹理

4、避开内存使用高峰、

5、使用加载界面来预加载游戏资源。

6、当不需要的时候释放无用的资源

7、当有内存警告的时候释放缓存的资源

8、使用texturePacker来优化纹理尺寸,格式,色彩深度值等等。

9、小心使用JPG文件

10、使用16位RBGA4444色彩深度的纹理

11、使用NPOT纹理代替POT纹理

12、避开加载大尺寸图片

13、使用1024*1024 NPOT pvr.ccz纹理图集而不是原生图片

一、cocos2dx之如何优化内存使用(高级篇)相关推荐

  1. Spark性能优化指南:高级篇

    前言 继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问 ...

  2. mysql高级篇(二)mysql索引优化分析

    mysql高级篇笔记 mysql高级篇(一)mysql的安装配置.架构介绍及SQL语句的复习. mysql高级篇(二)mysql索引优化分析. mysql高级篇(三)查询截取分析(慢查询日志).主从复 ...

  3. [zz]cocos2d-x如何优化内存的应用

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

  4. Spark性能优化指南——高级篇

    继基础篇讲解了每个Spark开发人员都必须熟知的开发调优与资源调优之后,本文作为<Spark性能优化指南>的高级篇,将深入分析数据倾斜调优与shuffle调优,以解决更加棘手的性能问题. ...

  5. 【转】【技术博客】Spark性能优化指南——高级篇

    http://mp.weixin.qq.com/s?__biz=MjM5NjQ5MTI5OA==&mid=2651745207&idx=1&sn=3d70d59cede236e ...

  6. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略

    IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...

  7. Mysql优化高级篇(全)

    目录 前言 1. 简介 1.1 安装 1.2 MySQL逻辑架构 1.2.1 存储引擎 2. 索引优化分析 2.1 原因 2.2 常见通用的join查询 2.3 索引 2.3.1 索引分类 2.3.2 ...

  8. MySQL高级篇知识点——索引优化与查询优化

    目录 1.数据准备 1.1.建库建表 1.2.创建相关函数 1.3.创建存储过程 1.4.调用存储过程 1.5.删除某表上的索引 2.索引失效案例 2.1.全值匹配 2.2.最佳左前缀匹配原则 2.3 ...

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

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

最新文章

  1. 力扣(LeetCode)刷题,简单+中等题(第26期)
  2. Vim 自动文件头注释与模板定义
  3. 2014年7月17日学习笔记--PHP的循环结构学习
  4. Debian和CentOS主流系统按包含文件名称搜索软件包
  5. Linux 增加对外开放的端口
  6. 第一章:1.2.2系统分类(二)
  7. html——黑体、斜体、下划线及删除线
  8. 初中毕业自考计算机专业难吗,初中学历自考本科难吗?初中毕业自考大专步骤有哪些?...
  9. [BUUCTF-pwn]——jarvisoj_level3_x64
  10. 理解cookie与token(JWT)
  11. python对非it上班族有用吗_非专业人士学Python有用吗?
  12. 无类型指针、空指针和野指针
  13. 光绪变法为什么没成功
  14. 谷歌登录com.google.andriod.gms.common.api.ApiException:10异常处理
  15. MinGW-w64的安装及配置教程
  16. 计算机的指令集作用,指令集是
  17. 基于OpenSSL,实现SM2签名数据的ASN1编码转换
  18. 【子桓说】在BAT等大公司升职的人,都明白这几点
  19. 启动Activity的流程(Launcher中点击图标启动)
  20. Procmon监控软件使用教程

热门文章

  1. 大公司为什么都有API网关?没你想的那么简单!
  2. Spring Boot 实现定时任务的 4 种方式
  3. linux后台执行命令:amp;与nohup的用法
  4. 为什么一定要前后端分离?
  5. Docker入门与实践
  6. 用Transformer实现OCR字符识别!
  7. Datawhale来杭电啦!
  8. 数据分析索引总结(中)Pandas多级索引
  9. 厚积薄发!他读博前三年零文章,后期发力产出11篇一作,现任985高校博导
  10. 中国各地高考难度地图:上大学最难的省份是哪里!?