代码之家  ›  专栏  ›  技术社区  ›  puppybits

AS3-Unloaded AVM1 swfs跟踪为Unloaded,但没有为AVM2机器释放内存

  •  1
  • puppybits  · 技术社区  · 16 年前

    我可以访问as2swfs代码库,销毁所有对象,停止并终止计时器、侦听器,从后台删除,销毁所有创建的MovieClip.protoypes。只要AS2调试器在destroy函数运行后没有显示对象的剩余部分,它们看起来是干净的。在AS3中,我关闭了本地连接,清除了对AVM1Movie的所有引用/侦听器,并运行了Loader.unloadAndStop()。flex中的trace out表示swf被卸载了,但是在windows任务管理器中,内存使用率从未下降到as2swf加载之前的水平。每个as2swf每次运行时可以占用80兆的内存,因此内存会很快被占用,并加载和卸载一些as2文件。

    在这一点上,如果AS2 SWF被卸载了,我可以假设剩下的只有MovieClip.prototype和/或\u global,根变量会在AS2的运行时添加。但我已经检查过了,找不到其他可能粘住我的东西。以前有人见过AVM1机器没有释放内存的问题吗?

    2 回复  |  直到 16 年前
        2
  •  0
  •   fenomas    16 年前

    相反,我的经验是,你加载内容,你的内存使用率跳起来,然后你卸载它,使用率保持不变。然后你加载更多的内容,如果你的使用率保持不变,你就知道你之前已经正确地释放了内容,Flash正在为你的新内容重用释放的内存。这是您通常需要测试的方式,而不是等待内存使用率降低(虽然总内存有时确实会减少,但这种情况发生的确切时间可能是最好不要担心的。)

    另外,您可能会发现使用 System.totalMemory