cocos内存泄漏以及优化问题
来源:互联网 发布:淘宝修改标题必须下架 编辑:程序博客网 时间:2024/06/16 08:53
这几天疯狂的赶进度
到了今天晚上突然服务端和美工告诉我
进度都卡住了。
实在无奈就上来更篇博客。
最近遇到几个好玩的事情,关于内存泄漏
要知道当时开发unity的时候很少去管内存这个东西,可能是unity的内存池做的比较好,也可能是c#没有c++如此繁琐的管理内存,又或许是在unity里面很少new等等原因。
很多原因导致我去管底层的东西,而出现问题之后也只能硬着头皮上了。
提前说下,最近把工程放在xcode上开发,一个是比较方面发布ios,另一个就是自带插件工具实在要比vs好用的多。
某天,我运行的程序调试的时候,对门的大兄弟倒水喝茶偶然看见我的cpu到了40,内存已过100m
就给我科普了下,最好是不要超过90。
之前我是一直没管内存的问题的,ui基本上是用cocos studio做的,着实是为了方便。
后来想去优化内存总是压不下来,所以我后来都不用cocos studio去做了,全手工代码~~
这里我提几个原理和解决方案
1.内存的占用绝大部分是来源于图片和音频,一个png图片大小1m不到可以跑到10-30m的缓存,原因是加载,渲染。有人说只有2倍,显然不止。
2.只要是加入到缓存的资源,不去手动释放就会永远放在那里。
3.cocos studio加载的资源,暂时还找不到去释放的函数,尝试过让noot指针delete,报错,所以如果有,请告诉我,如果你也没发现,尽量少用~~
4.尽量让你的内存《90m,图片打包成图集,多图集,多加载,多释放。
5.音频请根据不同平台优化,也是需要清楚缓存的
6.尽量释放所有内存,除非是频繁使用的一些模块,譬如背包之类的,否则影响不了太多的用户体验。
这里我说几个解决方案。
1.单图打包成图集,好处1:app包资源小,2:释放和加载资源方便
2.释放函数为:
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
Director::getInstance()->getTextureCache()->removeUnusedTextures();
Director::getInstance()->getTextureCache()->removeAllTextures();
请按这个顺序去释放。
3.背景图请尽量用jpg
4.如何查看内存泄漏
我使用的工具是xcode自带的Leaks,超级好用。
注意new出来的指针请务必delete。顺便吐槽下c++11都出来这么久了,cocos更新下智能指针会死哦~
后面的修改:
考虑到之前的释放方式有些不太好,后来又更改了
//内存优化 ,第一个是释放当前场景
this->removeFromParentAndCleanup(true);
AnimationCache::destroyInstance();
SpriteFrameCache::getInstance()->removeUnusedSpriteFrames();
Director::getInstance()->getTextureCache()->removeAllTextures();
Director::getInstance()->replaceScene(HelloWorld::createScene());
最好是在场景切换的时候去释放内存- cocos内存泄漏以及优化问题
- Java内存回收、泄漏以及性能优化
- 内存优化之内存泄漏问题
- 正确理解Threadlocal类以及内存泄漏问题
- 重新认识 ThreadLocal 以及内存泄漏问题
- ThreadLocal实现原理以及内存泄漏问题
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具Visual Leak Detector
- 内存泄漏以及各种不同的优化方法
- 内存泄漏,检测,优化
- 性能优化(内存泄漏)
- 内存泄漏优化---Handler引发内存泄漏
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
- Cocos开发中性能优化工具介绍之Visual Studio内存泄漏检测工具——Visual Leak Detector
- Android 常用性能优化方案:解决内存泄漏问题
- Application对象的使用-数据传递以及内存泄漏问题
- Application对象的使用-数据传递以及内存泄漏问题
- Application对象的使用-数据传递以及内存泄漏问题
- Application对象的使用-数据传递以及内存泄漏问题
- protobuf的编译与安装(教程)附带资源(亲测,Mac下可以用)
- Program2_1020
- 如何查看哪些期刊被SCI收录
- okhttp简单介绍
- windows机制下的游戏编程实例二
- cocos内存泄漏以及优化问题
- 10006---全文检索引擎Solr系列——Solr核心概念、配置文件
- studyjams notes PS1 设计一个静态的app
- 动态栈
- 如果你有微信企业号,申请企业微信很便捷
- 欢迎使用CSDN-markdown编辑器
- Linux下 进度条
- Tomcat学习笔记 catalina.bat & setclasspath.bat
- LeetCode Rotate Array