加载器不会从内存中清除

时间:2013-09-23 22:33:19

标签: actionscript-3

我一直在努力解决这个问题。 我有一个加载器,每十秒加载一次外部图像。我的问题是,虽然我已经尝试了所有类型的东西来清除它,但它每次加载图像时都会消耗更多的内存。

正如您所看到的,在代码的最后,我正在尝试我能找到的所有内容而没有任何结果。每次 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();

}

1 个答案:

答案 0 :(得分:1)

乍一看:每次加载新图片时都会调用addChild(image);,但绝不会从image中删除stage个孩子。在addChild之外拨打onTimerComplete,然后只需替换内容。

无需取消加载器myLoaderfileRequest,尤其是image。你太努力了。

另外,不要强制垃圾收集。 Flash运行时将在需要完成时为您执行此操作。使用System.gc作为解决方法不会使内存树中的剩余链接无效。

最后,使用定时器(每1秒)重新加载图像可能不是一个好主意。在某些情况下,加载图像需要的时间超过1秒。而是使用异步函数递归来获取新图像:仅当图像完成加载时,您应该等待1秒(此时使用间隔)来获取新图像。