引擎版本2.4.8,cc.Label内存无法释放 <有偿解决>

嗯,我跑跑看看。

:eyeglasses: :eyeglasses:

你点击的时候把 对象存储的 数组清空了,我这面测试是可以正常释放的helloworld.zip (3.3 MB)

image 测试工程这里已经清空了的,还是有10M内存释放不了

问下你微信调试基础库选的是多少

2.26.0

一样的基础库

你第一次创建的时候,内存会涨多少,我这边测试了几遍,第一次创建会涨22M内存,用helloworld的那个工程

感觉引擎内部也有内存消耗,我这面首次进游戏 746M 创建4个label 占用 786M 移除之后 782M

也就是说创建label 会有个基础的 36M内存消耗。 后续再创建label 就正常了。

现在我这边测试结果就像你说的这样,第一次创建总会有哪里会占用,后续在释放就正常了

浏览器上可以用工具看一下 内存快照,看看是哪个地方占用的内存。有可能不是纹理的占用。

好的,我尝试用这种方式在定位一下

资源回收之后,用微信后台再回来 强制gc一下。看看内存是不是会变小。如果没有变,说明内存是被什么对象强关联没有释放,引擎内部也存在一些缓存。可以看看是不是这些缓存占用了。

我昨天给的在 canvasPool 那里做了 canvs.width = canvs.height = 0 是回收位图内存。canvasPool 自身还会持有 canvas 对象内存,之前测试了一下,一个 canvas 增加个 1-2m 差不多。如果这里测试 4-8 个label,应该释放后增加个 5-10m 是合理的。

我换了个测试方式,昨天那个地方不改,只改这个地方,不管是 ctx 占用还是 canvas 自身占用都去除,测试了一下基本能全部回落

测试机型是 iphone7

1赞

脚本测试我也更新了一下,创建两次,再一次次销毁

HelloWorld.js.zip (1.9 KB)

好的,我在测试验证下 :eyeglasses:

是会好一些,不过还是不太稳定有残留 :sneezing_face:

你是有开高性能吗?我在普通模式下几乎没感觉残留,或者你这里怎么测试的,我们拉齐一下测试方式

现在有一种情况下也是会增加释放不了的内存的,比如说,每加一个字号的字体,就会多加4m的内存,并且你把label销毁了也没有办法释放内存,然后加了描边跟加粗也是一样,每加一个不同的都会稳定增加4m的内存
比如说,你创建了1个30号,1个30号描边1,1个30号描边2,一个30号加粗,1个31号的label那么会增加20m的内存,而且释放不掉

这个是在什么平台出现的。小游戏还是native

小游戏平台,原生的没有试过,网页版的不会