1.什么是内存优化?

通过对游戏的资源包括纹理、声音、数据等进行优化达到减少对游戏运行时内存的占用。

2.为什么需要内存优化?

当游戏运行时发生闪退或者打开时发生崩溃,往往是程序所在占用的内存超过系统的阈值,会被系统强制关闭。因此在开发时,需在保证运行效率的同时,尽量压缩程序运行时所占用的内存。

3.如何内存优化?

1.纹理优化:
1.什么是纹理?
纹理是一张可显示的图像,或一段用于计算的中间数据,通过 UV 坐标映射到渲染物体表面,使之效果更为丰富精彩且真实。

2.为什么要纹理优化?
在游戏中,纹理不仅占据大量的包体,也占据了大量的内存。传统的图片压缩格式(如JPEG、PNG等)虽能减少资源大小,但是不能被GPU直接识别,还是需要先加载到内存通过CPU解码,转换成RGB/RGBA等能被GPU识别的格式,才能传送到GPU进行渲染。在内存中占用的大小要远远大于我们在磁盘中看到的大小

3.如何纹理优化?
压缩纹理,是一种GPU能直接读取并显示的格式,使得图像无需解压即可进行渲染,可节约大量的内存。常见的纹理压缩格式ETC,PVRTC.
在cocosCreator中配置及使用纹理压缩功能

4.纹理压缩相关知识
1.图片加载到内存到占用公式为:
分辨率 * 像素格式通道所占用的位数 / 8 = 内存占用
像素格式-每个像素所使用的颜色通道的组合模式。
像素深度是指存储每个像素所用的位数。
颜色通道是指R,G,B,A -不透明度
常见像素格式有以下(1byte = 8bit)
RGBA4444-每个通道占4位(bit)-44 = 16bit=2byte
RGBA8888-每个通道占8位(bit)-4
8 = 32bit=4byte
RGB888-每个通道占8位(bit)-3*8 = 24bit=3byte

2.图片文件格式与纹理格式的区别:
图片文件格式:用于图像信息的存储和传输,有png(无损压缩)、jpg(有损压缩)。称为纹理,但他们并不是纹理格式,不能被GPU直接读取并显示。
纹理格式:是能被GPU所识别的像素/纹理格式。

5.压缩纹理注意点
1.纹理压缩后的图片文件要比原文件大很多。即压缩纹理不适合H5以及小游戏
2.webgl 只支持rgba8888格式。
3.测试工具-: perfdog

2.资源管理:
1.为什么要对资源进行管理?
项目中最消耗内存占用的就是资源。所以要对资源有合理管理。
creator 的资源在内存中的管理方式:
1.存储方式
资源在加载完成后,会以 { uuid : cc.Asset } 的形式被缓存到 cc.assetManager.assets 中,以避免重复加载。
2.引用计数
原理:将资源(可以是对象、内存或磁盘空间等等)的被引用次数保存起来,当被引用次数变为零时就将其释放的过程。

cocos:当资源加载完成会返回 cc.Asset 实例, 所有 cc.Asset 实例都拥有成员函数 addRef 和 decRef。

资源在cocos中的引用计数分为
1.静态引用-编辑器中编辑资源
加载某个资源时会对该资源所依赖的资源引用计数+1
释放某个资源时会对该资源所依赖的资源引用计数-1
2.动态引用-只通过代码动态加载
加载某个资源时会对该资源所依赖的资源引用计数+0
因此需要手动管理引用计数(代码中执行addRef 和 decRef)

//.addRef()
cc.resources.load(“HelloWorld”, cc.SpriteFrame, (err, assets: cc.SpriteFrame) => {
this.sprite.spriteFrame = assets;
this.sprite.spriteFrame.addRef();
});
//decRef();
this.sprite.node.destroy();
​this.sprite.spriteFrame.decRef();

2.如何进行对资源释放?
cocos资源释放方式分为
1.自动释放

2.手动释放
调用 Asset Manager的接口
releaseAsset-释放资源以及其依赖资源, 这个方法不仅会从 assetManager 中删除资源的缓存引用,还会清理它的资源内容。
releaseUnusedAssets-释放所有没有用到的资源。
releaseAll-释放所有资源。

3.释放检查
Creator 会在自动释放资源之前进行一系列的检查,只有引用计数为0时,才会进行自动释放。

注意点:
1.Asset Manager 只会 自动统计 资源之间的 静态引用,并不能真实地反应资源在游戏中被动态引用的情况,动态引用 还需要 开发者进行控制 以保证资源能够被正确释放。

2.动态加载 的资源必须手动卸载
① 通过引用计数:addRef 和 decRef
② 直接释放:releaseAsset

Cocos Creator性能优化-4-内存优化相关推荐

  1. Cocos Creator 性能优化:DrawCall

    Cocos Creator 性能优化:DrawCall(全面!) title: Cocos Creator 性能优化:DrawCall 前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标 ...

  2. Android 系统性能优化(55)---Android 性能优化之内存优化

    Android 性能优化之内存优化 前言 Android App优化这个问题,我相信是Android开发者一个永恒的话题.本篇文章也不例外,也是来讲解一下Android内存优化.那么本篇文章有什么不同 ...

  3. App性能优化(布局优化,线程优化,app瘦身优化,页面切换优化,App启动优化,内存优化)

    Android APP性能优化(最新总结) 在目前Android开发中,UI布局可以说是每个App使用频率很高的,随着UI越来越多,布局的重复性.复杂度也随之增长,这样使得UI布局的优化,显得至关重要 ...

  4. Lua性能优化—Lua内存优化

    原文链接https://blog.uwa4d.com/archives/usparkle_luaperformance.html 这是侑虎科技第236篇原创文章,感谢作者舒航供稿,欢迎转发分享,未经作 ...

  5. Cocos Creator性能优化---DrawCall

    前言 在游戏开发中,DrawCall 作为一个非常重要的性能指标,直接影响游戏的整体性能表现. 无论是 Cocos Creator.Unity.Unreal 还是其他游戏引擎,只要说到游戏性能优化,D ...

  6. Cocos Creator 性能调优优化集锦

    01 为什么要做性能优化? 性能:是一种优秀的能力.唤醒快.运行持久.稳定. 这种能力在游戏上能让你的用户感觉很爽,表征表现为加载快.手机不发热.运行流畅.不卡顿. 所以,性能优化的终极目标是让你的用 ...

  7. Cocos Creator | 游戏优化之内存优化-资源管理

    更多教程请关注微信公众号: 设备对每个程序都有最大的内存分配限制,如果超过了这个阈值,会被系统强制关闭,造成 crash 因此在开发的过程中,我们要在保证程序运行效率的前提下,尽量压缩程序运行时所占用 ...

  8. Cocos Creator性能优化-2-包体优化

    对于Cocos Creator包体优化可分为 1.项目设置 1.模块设置 通过去除无需使用的模块来减少包体 (微信小游戏还支持引擎插件可在打包时勾选) 2.resources 总而言之不需要动态加载的 ...

  9. android—性能优化2—内存优化

    文章目录 性能优化: 工具: memory profiler LeakCanary arthook epic 库 java内存管理机制 java 内存回收机制 Android内存管理机制 Dalvik ...

  10. Android App性能优化之内存优化

    为什么要进行内存优化? 1.App运行内存限制,OOM导致App崩溃 2.App性能:流畅性.响应速度和用户体验 Android的内存管理方式 Android系统内存分配与回收方式 ●   一个App ...

最新文章

  1. 聊聊flink的CheckpointScheduler
  2. c++整理程序 dev_C编程从入门到实践:C语言开发工具详解(2)
  3. http modules在.net安全认证中的作用
  4. concatenate mutliple videos in ffmpeg
  5. el表达式里面fn的用法
  6. 盘点2021AI Conference Deadlines及论文写作突击要点
  7. 交换机命令中的正则表达式过滤方式
  8. 2021年9月电子学会图形化四级编程题解析含答案:成语接龙
  9. 计算机联锁控制系统的软件应具备信号操作功能,N6_计算机联锁控制系统原理-软件原理.ppt...
  10. Excel数据导入___你hold住么(二)
  11. android 5.1 屏蔽MENU键 返回键唤醒系统
  12. 4.widows对象
  13. 关键对话:如何高效能沟通(第二章)
  14. CSDN21天学习挑战赛——Python常用标准库概述
  15. 错误: 找不到或无法加载主类的解决办法
  16. 程序员喜爱的壁纸,需要自取
  17. 有三类人永远做不了程序员
  18. 转载 调试器工作原理
  19. jQuery贼简单的选项卡切换
  20. arm sshd交叉编译及部署

热门文章

  1. 数组中除一个元素外其他所有元素出现二或三次,找到只出现一次的元素
  2. 刻录linux安装光盘,如何将红旗Linux5的两个ISO安装光盘镜像刻录到一张DVD光盘上,做成安装光盘[原创]...
  3. Shannon-Fano编码——原理与实现
  4. 使用python做王者荣耀挂机刷金币脚本
  5. Python中单引号,双引号和三引号各自的作用
  6. SVN clean up 报错
  7. android 放大镜功能,Android放大镜效果实现
  8. java的string的intern_java String的intern()方法
  9. ASP.NET Web程序设计 第四章 系统对象
  10. 两步解决WIN7 下IE经常未响应的假死现象