我有一个用as3构建的大型项目。它的部分主要功能是加载和卸载各种as2 swfs。问题是,一旦卸载,内存就不能释放。
我有权访问as2 swfs代码库,并销毁所有对象,停止和杀死计时器,侦听器,从舞台上删除,销毁所有创建的MovieClip.protoypes。它们看起来是干净的,因为在运行销毁函数后,AS2调试器没有显示对象的残留物。在AS3中,我关闭了本地连接,清除了对AVM1Movie的所有引用/侦听器,并运行了Loader.unloadAndStop()。as2中的跟踪显示swf已卸载,但查看windows任务管理器,内存使用量从未下降到加载flex swf之前的水平。每个as2 swf在每次运行时都会占用高达80兆的内存,因此加载和卸载几个as2文件的速度会很快。
在这一点上,如果AS2SWF被卸载,我可以假设唯一剩下的就是MovieClip.prototype和/或_global,_root变量是在AS2运行时添加的。但我已经检查过了,找不到任何其他可能会卡住的东西。以前有没有人见过AVM1机器没有释放内存的问题?
发布于 2010-05-10 08:15:58
我认为你应该读一下格兰特·斯金纳写的这些文章:
http://gskinner.com/blog/archives/2006/06/as3_resource_ma.html
http://gskinner.com/blog/archives/2006/07/as3_resource_ma_1.html
http://gskinner.com/blog/archives/2006/08/as3_resource_ma_2.html
在第二个版本中,Issue 2: Loaded 一节真正指出了您的问题。
发布于 2010-03-30 11:46:09
唯一的问题是内存使用率没有下降,还是确定内存没有被释放?我更熟悉内存匮乏的移动内容,但一般来说,在Flash从操作系统请求内存后,它不一定会返回内存,因为它不再被使用。
相反,我的经验是,你加载内容,你的内存使用量会激增,然后你卸载它,使用率保持不变。然后你加载了更多的内容,如果你的使用量保持不变,你就知道你之前正确地释放了东西,Flash正在重用释放的内存来存储你的新内容。这是您通常需要进行测试的方式,而不是等待内存使用量减少。(虽然总内存有时会减少,但确切的发生时间可能最好不用担心。)
此外,您可能会发现,使用System.totalMemory跟踪内存使用情况比跟踪windows任务管理器中显示的内存使用情况更好。
https://stackoverflow.com/questions/2540518
复制相似问题