bmfont内存泄漏(附demo)


再现方式:
分别有prefab1与prefab2
prefab1中有若干系统字label
prefab2种有若干bmfont的label

场景分别加载1和2,进行多次加载
反复加载1,加载10次内存增涨1m左右,50次增涨3~4m,总体来说可以忽略不计
反复加载2,第一次加载,内存增涨30m左右,可以理解为首次加载bmfont资源,没有问题
问题在于后续加载2,每次加载,内存增涨3~4m,反复加载10次就是30m+,反复加载50次,直接暴涨150m~200m
最终会触发系统内存上限导致应用崩溃

–>

  • Creator 版本:1.8.2 2.0.10

  • 目标平台:

  • 出现概率:100%

demo(使用1.8.2引擎制作)
neicundemo.zip (1.2 MB)

@woaibusi 抱歉,多谢反馈!

问题说明:

这个问题其实不是内存泄漏,内存暴涨的原因是因为使用了BMFont的Label会缓存一份FontAtlas的数据来记录文字的映射关系,而Demo中使用的BMFont是2048*2048的图片资源,记录了大概2800个文字数据,因此每个Label都去创建一份有2800个字符数据对象的FontAtlas,当使用该BMFont的Label数量不断增加时,就会导致内存占用过大。这个问题在少量的BMFont文字数据下,内存变化不会很明显,在文字数量较多时,就会暴漏出内存占用过高的问题。

修复:

该问题优化的PR https://github.com/cocos-creator/engine/pull/4651 ,可以合并这里的修改进行问题修复。

求问,楼主内存监测用的什么工具?

请问这个修复在哪个版本会发布呢

2.1.2

2.1.2正式版加快进度啊,攒了好多小bug了

可能是instrument

你解决是2.x的引擎哦,1.8.2并没有解决!

抱歉 1.x 已经不维护了

好的~

赞!!!这个优化效果对于小游戏尤其明显

1.x版本的修复是一样的,相关代码在CCSGLabel.js文件里面,可以自行做下修改。

不是ccLabel.cpp里么~,那里也执行了拷贝字符串