【问题标题】:Release application domain from main SWF从主 SW​​F 释放应用程序域
【发布时间】:2011-12-13 02:50:09
【问题描述】:

我想知道卸载 swf 后有办法删除所有数据。

调用 Loader.unloadAndStop();删除内容和加载的字节,但加载的类保留在应用程序域中。

如果我将它加载到单独的新 ApplicationDomain ,gc 将在卸载后收集它们并删除所有引用?

【问题讨论】:

  • 你会遇到很多麻烦才能获得最少的节省
  • 我不考虑单个字节,而是考虑内部包含大量图形或 bitmapData 的类(如游戏、声音等)。

标签: flash actionscript-3 garbage-collection applicationdomain


【解决方案1】:

首先,您加载到域中的类在卸载时不会留在内存中,除非您保留引用。所以,如果你做了类似的事情:

private static var foo:Class = 
    loadedSWF.loaderInfo.applicationDomain.getDefinition("Foo");

然后,很明显,它将留在内存中。还有一些其他事情需要注意,根据播放器版本,registerClassAlias() 的行为会发生变化,如果从加载的 SWF 调用它,则别名将在父域中注册,因此不会有稍后卸载该类,除非您为另一个类注册相同的别名。在后来的一些版本中,但不是最后一个版本,它会在正确的域中正确注册类,但它破坏了一些人的代码...... sigh 今天的行为有点不可预测,它会尝试根据在该域中使用的类来决定哪个域尝试注册别名,当然,在运行时可能会有所不同...

【讨论】:

  • @ wvxvw : "...加载到域中的类在卸载时不会留在内存中..." 即使我将其加载到 ApplicationDomain.currentDomain 中?
  • 谢谢,这正是我需要的。
  • 是的,这正是我需要知道的——如果没有引用,可以删除其他应用程序域类,但加载到当前应用程序域仍然存在。
猜你喜欢
  • 2016-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2011-09-14
  • 2010-09-26
  • 2017-11-02
相关资源
最近更新 更多