[LayaAir 1.0]cacheAs="bitmap"导致内存泄露

被设置cacheAs="bitmap"的UI,反复添加,移除,会导致对象IndexBuffer2D和VertexBuffer2D泄露,连带的,也导致其关联的数据对象泄露,游戏内用cacheAs="bitmap"优化的地方越多,开关界面次数越频繁,泄露越明显。还没有验证设置了cacheAs="bitmap"UI的面积大小,跟泄露量的关系,似乎面积越大,泄露也会越明显
 
请问如何规避这个问题,是否先不建议使用cacheAs="bitmap"?
 
重现引擎版本1.8.2,1.7.22
 
附带重现示例DEMO,点击btn开始执行,点击btn2停止执行
cacheAs泄露.png
已邀请:

Aar0n

赞同来自:

3、如何选择缓存优化3.1 内存与CPU的考量bitmap模式与内存增加
在上例中我们也可以看到,当使用bitmap位图缓存模式后,在CurMem内存数值上有所增加,由之前的17.22M增加到了18.27M,因为缓存位图时消耗了部分内存,但只要UI的宽高不是很大,增加的内存也不会太大。频繁刷新的CPU消耗
最需要注意的是UI是否会频繁的刷新,如果很频繁,CPU的损耗会很大,因为缓存位图时子对象一旦发生改变,那么引擎会自动重新缓存位图,缓存位图的过程会消耗CPU。
那么选择使用cacheAs的normal还是bitmap模式,或者不使用cacheAs,我们需要对内存的增加与CPU消耗作为重点考量因素。3.2 测试是否频繁重绘
LayaAir引擎提供的DebugPanel调试工具可以帮助大家查看游戏重绘区,在代码中增加
DebugPanel.init();
 方法 ,编译运行项目后,浏览器中会出现调试窗口,如图4所示。
 
(图4)
我们勾选“
显示当前cache重绘
”选项或“
显示所有重绘区域
”。如果UI进行重绘了,重绘区域会显示出绿色框线,绿色框的左上角显示了重绘次数与重绘时间,性能统计工具的Sprite、DrawCall等也会发生改变。
 
 
实际上这种频繁刷新的不建议用

Aar0n

赞同来自:

如果项目不大的话,建议用2.0引擎。或者不使用cacheAs,把这块绕过去

要回复问题请先

商务合作
商务合作