0

我已经为此苦苦挣扎了一段时间。我有一个加载器,每十秒加载一个外部图像。我的问题是,虽然我在完成后尝试了各种方法来清除它,但每次加载图像时它都会消耗更多的内存。

如您所见,在代码的末尾,我正在尝试所有我能找到的东西,但没有任何结果。每次 发生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();

}
4

1 回答 1

1

乍一看:addChild(image);每次加载新图像时都会调用,但永远不要imagestage. 在 之外调用addChild一次onTimerComplete,然后替换内容。

没有必要取消加载程序myLoaderfileRequest尤其是image。你太努力了。

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

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

于 2013-09-23T22:43:41.873 回答