启用动态图集的好像会造成内存泄漏,附demo

引擎默认是启用动态图集功能的,在原生上看到小于512*512的纹理在在重复多次加载然后释放后内存会一直增加,原来是重复的纹理每次都会加到动态图集里去,用chrome检测就能看出来纹理有泄漏了

碎图会加到通过cc.dynamicAtlasManager.insertSpriteFrame加到动态图集里,当把部分碎图的纹理释放后,这里动态图集里的纹理是不会释放的,我看到cc.dynamicAtlasManager有reset方法,但这个会把所有动态图集的碎图销毁掉,不利用管控,@zzf_Cocos

能否给我个demo,我怕我本地的demo复现不出你的问题。

行,我出个demo

demo已上传,不需要在原生环境测试,直接用chrome就能测出来

谢谢你的反馈。
这个图片纹理被保存多份的原因是因为每次资源释放之后,贴图纹理的标识信息都会被清除,而重新加载时又会生成与之前不一样的标识信息。这导致了同一个图片但是动态图集缓存了两份。
我们目前是这样设计的。当场景切换之后,图集会被自动释放掉。
我们正在讨论是否优化这个问题,因为它确实带来了问题。

重复的东西在系统里有多份,这明显是不合理的,而且想释放,就必须全部动态图集都释放也不合理的,希望能改进下

目前我用的 2.2.2 貌似还会存在类似内存泄漏的问题。 当我重复用同一个url加载远程图片之后执行this.sprite.spriteFrame = new cc.SpriteFrame(asset); 因为每次都会创建新的spriteFrame,会执行cc.dynamicAtlasManager.insertSpriteFrame,虽然目前版本纹理没有产生多个,但是老的spriteFrame一直没有被移除,导致 _innerSpriteFrames 一直在增加

1赞

顶一下,新项目使用的2.2.2,关注下这问题。

在 2.4.0 版本此问题已经解决。