我一直在努力解决这个问题。 我有一个加载器,每十秒加载一次外部图像。我的问题是,虽然我已经尝试了所有类型的东西来清除它,但它每次加载图像时都会消耗更多的内存。
正如您所看到的,在代码的最后,我正在尝试我能找到的所有内容而没有任何结果。每次 myLoader.load(fileRequest)发生时内存使用量都会变大。
有什么想法吗?
: - (
var tenSec:Timer = new Timer(1000,10);
var image:DisplayObject;
var myLoader:Loader;
tenSec.removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
tenSec.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
tenSec.start();
function onTimerComplete(event:TimerEvent):void
{
myLoader= new Loader();
myLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onLoaderReady);
myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderReady, false, 0, true );
var fileRequest:URLRequest = new URLRequest("http://"+ip+"/radiosite/image.jpg?nocache=" + new Date().getTime());
myLoader.load(fileRequest);
function onLoaderReady(e:Event)
{
image = myLoader.content;
addChild(image);
image = null;
myLoader.unload();
myLoader = null;
System.gc();
fileRequest = null;
}
tenSec.reset();
tenSec.start();
}
答案 0 :(得分:1)
乍一看:每次加载新图片时都会调用addChild(image);
,但绝不会从image
中删除stage
个孩子。在addChild
之外拨打onTimerComplete
,然后只需替换内容。
无需取消加载器myLoader
,fileRequest
,尤其是image
。你太努力了。
另外,不要强制垃圾收集。 Flash运行时将在需要完成时为您执行此操作。使用System.gc
作为解决方法不会使内存树中的剩余链接无效。
最后,使用定时器(每1秒)重新加载图像可能不是一个好主意。在某些情况下,加载图像需要的时间超过1秒。而是使用异步函数递归来获取新图像:仅当图像完成加载时,您应该等待1秒(此时使用间隔)来获取新图像。