在Internet Explorer 7(和其他浏览器)中加载Flex中的图像会导致内存上升

sc4*_*c45 1 apache-flex actionscript-3

将图像加载到Flex(大小<100kb)会导致IE7内存每个图像增加一兆字节.这里发生了什么?这是我的代码 - 每个图像都有:

var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_Error, Retry);//retry it
loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
  function(event:Event):void
  {
    var bitmap:Bitmap = (e.target.loader as Loader).content as Bitmap;
    // save it & Load next
  });
loader.load(new URLRequst( imageURL ));
Run Code Online (Sandbox Code Playgroud)

这也发生在Chrome(2.0.172.33)和Firefox(3.0.10)中.如何减少内存使用量?谢谢!

Jua*_*ano 5

我不认为每张图像增加大约1 Mb是必须担心的.你指出图像小于100 Kb,但你可能看错了数字:例如,我刚发送的640x480 jpg需要大约48 Kb,但如果你做数学,那么原始图像占用900 Kb(640*480*3 = 921,600).如果你使用透明度,则乘以4而不是3.事实是玩家必须解压缩图像才能操纵它.仅为这样的图像存储原始字节可能占用1兆或更多(取决于其大小).

而不是专注于减少每个图像的内存使用量(这无论如何都是粗略的估计),你可能最好在你完成图像后检查自己是在清理自己.不这样做可能会导致更严重的问题.我同意rhtx的观点,Flex Builder的Profiler是检测泄漏的好工具,如果您可以使用的话.在这种情况下,一个简单的测试可能是加载图像,获取内存快照,卸载图像,强制GC,拍摄第二个快照并将其与第一个快照进行比较.

  • 用于指出加载的图像的+1,无论压缩程度如何,最终都是位图.令人惊讶的是,很多人都没有意识到会发生什么. (2认同)