Sprite3D内存释放问题

引擎版本3.3
关于Sprite3D内存释放的问题,求指教,求解决方案(不升级引擎)

问题描述:
在一个空的Layer上,初始化时先添加好模型的材质到纹理缓存 cc.Director:getInstance():getTextureCache():addImage(“res/ani3ds/boss101.png”),让这张纹理常驻内存,此时,内存占用22M

1.创建3D精灵 在ios真机上查看当前内存变化,此时,内存占用31M

2.将3D精灵从界面中移除了,此时,内存占用28M,并没有回到之前的22M

之前占用的内存没有降回来。。。。。

这个问题很严峻,如果战斗中3D模型较多,切换场景回来后,内存直接暴涨几十兆啊~~~

清空3D缓存 Sprite3DCache::getInstance()->removeAllSprite3DData(); 也调用了,仍旧不行。。。

这个问题在3.5版本也测试过,存在同样问题,如果不能解决,恐怕3D功能很多人都会。。。。。

http://www.cocoachina.com/bbs/read.php?tid-294694.html
这个链接据说修改了一处内存泄露,但是上面的内存问题仍旧存在。

项目已经处于中期,望官方大神关注一下这个问题~ 不胜感激!

已关注:2::2::2::2:

继续顶一下!希望官方可以给出解决方案!

您好,就V3.5而言,现在已知的内存泄露主要有这几块:
1 是动画的部分,因为动画的的内存申请是按照数组申请的,而删除时将其当做普通指针,您可以将 cocos/3d/CCAnimationCurve.inl
中的析构函数AnimationCurve::~AnimationCurve()的函数体修改为:
CC_SAFE_DELETE_ARRAY(_keytime);
CC_SAFE_DELETE_ARRAY(_value);
2 还有一块是读取模型的bundle的位置,那个位置主要原因是很多读取失败的时候中间产物没有被delete掉,因为修改的代码比较多,我在这里就不贴出来了,具体的你可以参看 这个commit来自行修改:
https://github.com/super626/cocos2d-x/commit/cae82fcdeb626a66251ebf7c624da603040b6ebc

个人认为您的问题主要由1引起的

同关注,我也有类似问题

操作系统级别缓存的数据,在进程空间不会马上释放的。

mark一下,很可能马上就要碰到了

可是2D的Sprite内存却可以立即回收回来啊

按照您说的方式 我很久之前都参考着改过了 内存仍旧降不下来。。。