请问如何解决cocos2d-x内存增长/泄漏的问题

背景:
版本是cocos2d-x3.6,语言C++,平台ipad,测试机ipad2。程序有二十多个场景,全部是cocos2.2做的,然后用CSLoader载入。

问题:
每当场景replace后,内存只增不减(使用Xcode debug navigator查看的内存占用),结果载入多个之后就会崩溃。尤其是有些场景包含Armature,占用内存很可观。大概10个场景以后,内存飙到280MB左右,再切换就导致随机崩溃。代码全部使用create创建对象,不使用new。

每次切换场景时都尝试以下代码释放缓存:

AnimationCache::getInstance()->destroyInstance();
ArmatureDataManager::getInstance()->destroyInstance();

Director::getInstance()->purgeCachedData();

但用处不大(会稍微降低内存增长速度)。

后来拿官方的cpp-tests做测试,发现官方的代码一样是只增不减,尤其是运行Armature测试和WebView测试的时候,内存占用量相当大,而且不释放。

以下是截图:

我的程序在切换几个场景之后的内存占用情况:

cpp-tests执行完auto test后的内存占用情况:

目前我想不到什么有效的方法解决这个问题,甚至不知道问题出来哪里,希望有人帮忙,万分感谢!!!

这个问题没人碰到吗?

你真机调试看看,我这里遇到过类似问题,真机调试是OK的,模拟器就是内存不正常

哥们我这边真机也是一样的问题,请问你解决了嘛?我折腾了好几天没什么进展

尝试在释放的时候加一个0.1s的延迟呢

无用,每次战斗结束,都会多很多的对象,也追踪不到是哪,有人说可能是内存碎片的问题,但是我觉得碎片可能是小问题

应该是cocos2d-x引擎的问题,加载CSB文件中的Armature控件后,使用完毕不释放图片资源,需要修改引擎源码,参见临时解决方法:http://www.cocoachina.com/bbs/read.php?tid-297642.html

但是这个方法也不能保证释放所有的资源,而且有过度释放的问题。过度释放后,Armature动画会变成黑框。

还是要官方解决才行,目前来看官方好忙不一定注意到

真机调试也一样的,必须修改引擎源码强制释放Armature图片资源,才能控制住内存增长

我印象中引擎加载Armature时会缓存到一个全局cache里,要手动释放这个cache才能完全卸载纹理。我之前写预加载的时候处理过Armature,在CCArmatureDataManager里面加了些方法做的释放。

我去翻了下以前写的代码,调用ArmatureDataManager::addArmatureFileInfoAsync做的加载,调用ArmatureDataManager::removeArmatureFileInfo做的释放,释放的参数带不带文件后缀名记不太清了

http://www.cocoachina.com/bbs/read.php?tid-330579.html
看一下我写的帖子,看看是不是骨骼动画的问题

感谢分享!我回去试试,估计是这个问题,谢谢。

这边显示的内存不准