[]关于大量图片加载绘制后的内存暴增的疑问

我们有一个需求是 有302个不同的头像,需要预加载 之后逐个绘制在界面上。
实现很简单,我通过Laya.loader.load预加载把302个图片资源加入到内存中,然后通过getRes 和 drawTexture 添加SPRITE对象到屏幕中。
预加载后的初始内存为29M左右
之后开始逐个添加SPRITE,在添加第1个到第80个头像的时候,内存显示稳定在29M
但是当添加第81个SPRITE头像的时候,内存会突然增长16M,变成了45M左右,之后每添加到第81个SPRITE的时候内存同样会暴增16M。302个头像SPRITE全部添加后内存显示在80M左右。
那么问题来了。。按照我的理解 预加载资源后 , 通过getRest 来使用的资源并不会额外增加资源内存的开销,而且前80个SPRITE的添加,内存并没有增长。那为何第81,161,241个SPRITE的添加各自会突然增加16M的内存。并且这个激增的48M内存 是无法通过clearRes 进行释放的。
为何会造成这样的情况,这额外产生的48M内存 是什么如何可以释放?麻烦解答。。。万分感谢
以下为图例:
添加第一个头像后的内存显示:

111.png


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

添加第80个头像后的内存显示

222.jpg


$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

添加第81个头像后的内存显示
333.jpg


 
已邀请:

cuixueying

赞同来自:

你这样操作,sprite数量太多了,请参考下我们的优化策略,对您的项目进行下优化
如何将HTML5引擎LayaAir的性能发挥到极致
 
用as写了一个示例:仅供参考

222.png
package
{
import laya.display.Sprite;
import laya.net.Loader;
import laya.resource.Texture;
import laya.utils.Handler;
import laya.utils.Stat;
import laya.webgl.WebGL;

public class Demo
{
private var num:Number=0;//加载图片的个数
private var sp:Sprite;//显示图片的显示对象容器
private var texture:Texture;//预加载图片的纹理
public function Demo()
{
Laya.init(800,1000,WebGL);
Stat.show();
Laya.stage.bgColor="#EEFFCC";
//预加载图集
Laya.loader.load("res/atlas/bag.json",Handler.create(this,onLoaded),null,Loader.ATLAS);
}

private function onLoaded():void
{
sp=new Sprite();
Laya.stage.addChild(sp);
//每隔0.05秒出现下张图片
Laya.timer.loop(50,this,onLoop);
}

private function onLoop():void
{
//更改texture的纹理,逐一显示不同的image
chageTexture();
//如果texture有值,进行绘制并排序
if(texture)
{
sp.graphics.drawTexture(texture,(num-1)*70,Math.floor((num-1)/10)*70+10);
}
}
private function chageTexture():void
{
//如果图片的张数超出100,将不再执行
if(num>=100)
{
Laya.timer.clear(this,onLoop);
return;
}
//绘制下一张图片
++num;
//拼写图集下小图的缓存资源路径
if(num<10)
{
texture=Loader.getRes("bag/0"+num+".png");
}
else
{
texture=Loader.getRes("bag/"+num+".png");
}
}
}
}

 
 

veronsl

赞同来自:

我把DEMO 进行了修改 在所有头像加在完毕后,再通过 clearRes 进行头像的清理,以及调用 removeChildren 清理画布内容 ,但是观察了一下,内存并未得到释放,请问一下这部分内存应该如何释放?

附件中是最新的DEMO 麻烦帮忙看一下,谢谢

要回复问题请先

商务合作
商务合作