使用Creator动画并设置循环模式导致内存不断上升

  • Creator 版本号:1.5.2, 1.6.0
  • 目标平台:(iOS / Android)

项目因为内存泄漏问题导致低内存的Android手机闪退,所以查找泄漏的地方,发现一个简单使用cc.Animation组件的帧动画,内存会不断上升,我是在Xcode的Debug Session检测memory的,版本1.5 .2和1.6.0也是相同情况。

另外转换场景的时候,使用了cc.loader.release等方法并呼叫cc.sys.garbageCollect,内存是可以释放,但存在内存泄漏,不能回到原来内存的大小。请教下有没有解决和查测方法?

1赞

你的动画里面的属性是什么?坐标,spriteFrame,还是什么自定义属性

动画坐标x:36.75 y:1.75 scale x:0.4 y:0.4 size w:155 h:97 使用Sprite的sprite frame type: simple, size mode: trimmed 和Animation play on load, wrap mode: loop, 也尝试用Sprite的Atlas 和官方动态创建Animation Clip的例子, 也是一样情况。
var animation = this.node.getComponent(cc.Animation);
var clip = cc.AnimationClip.createWithSpriteFrames(frames, 17);
clip.name = “anim_run”;
clip.wrapMode = cc.WrapMode.Loop;
animation.addClip(clip);
animation.play(‘anim_run’);

动画里面的属性有关系吗?

打一个空项目使用预设Cocos Creator ExampleCollection cases/03_gameplay/03_animation/CreateClip的绵羊动画例子,就能简单重现这问题。
作了一个简单记录17:28pm (82.9MB) => 17:39pm (90.9MB) ,简单一个4 frame循环动画,10分钟就增加8MB了。

确实是这样 动画系统会导致内存猛涨

那怎麽辦?或者轉換場景的時候,内存怎麽释放到原来内存的大小?

会一直涨吗?这个问题似乎有点严重啊

你不用帧动画测试,就用一个 sprite 来回移动的动画测试看看?
如果和之前不同的话就不是动画的问题了,要定位看看其他地方

用你的一个 sprite 来回移动的动画测试, 也是同樣情況。
记录如下:
14:58:15 83.6MB > 15:08:15 94.7MB
十分钟时间上涨11MB左右

再做了一个关闭动画的测试
11:18:45 81.7MB > 12:10:09 84.7MB

我的一个游戏场景中不停的创建node并执行移动动画,执行完删除node,不到十分钟就无法切换场景了,不知道是不是类似的原因

http://forum.cocos.com/t/invalid-native-object/50487

我这里试了一下 create clip 那个例子,memory 比较稳定的呢

如果你要测试内存泄露的问题的话,最好使用 xode 的 profile 里面 的 leaks 来查,这个可以查出是哪里有泄漏

明白,其实我最大问题都是转换场景时,内存泄漏的问题,导致低阶手机闪退。还有什么建议可以解决这问题?我看了占最大内存都是cocos2d::director::drawScene

请问内存泄露速度多快?持续多久?

我重新以creator v1.6.0版本在项目上作测试,感觉这版本好像比上一版本内存释放好了多,在这内存方面有更新吗?内存泄露速度不快,只要刚刚转换场景,也会有泄露。如果转换场景能释放可以回到低水平,希望低阶手机也可以应付。我会再作多番测试和实机android测试。以下是在xcode instrument的例子,转换场景后内存泄露的情况:

1.6 升级了 monkey,修复了很多内存泄露问题。从截图来看,有可能是内存泄露也有可能不是,不过可以肯定主要的来源都是 monkey 内部。我让 @panda 也看下。

spidermonkey 内部的一些泄漏可能跟它的内存管理有关系,这个我们也没办法处理。不过看上去有一些网络库的泄漏

@dumganhar

现在内存泄漏所占的比例也不算太高,相比以前由A场景到B场景再回到A场景,内存会有差不多100-200MB的内存增幅,现在这个1.6版本已经是一大进步了,我再在Android平台测试下,感谢三位大大的解答和协助,以及你们为creator引擎开发所作出的努力!!

解决了没有? 版本 1.6.1 播放动画 内存0.1M 的上升,播放一次升一次 :cold_sweat:

8年了,2.4.15居然还没修复这个问题,不停的创建node并播放动画,执行完删除node。使用cc.Animation组件的帧动画,WrapMode设置为Loop,30分钟就内存暴涨到卡顿。然后不做任何修改,只在编辑器中把WrapMode设置为Normal,跑几个小时都正常。

1赞