【问题标题】:Force Garbage collection of of others Flash app?强制垃圾收集其他 Flash 应用程序?
【发布时间】:2011-10-02 20:18:41
【问题描述】:

昨天在玩游戏(Balloons Tower Defense 3)时,我注意到游戏随着时间的推移开始变慢,然后随机加速非常快。每次我认为是 GC 运行时,查看内存使用量下降。

作为一个合理的问题,是否有强制 Flash 从例如 Firefox 到 GC?也许您可以运行一个插件或命令来执行此操作?我知道你can do System.gc(),但这个游戏不是我的,所以我不能用“点击这里到 GC”按钮来修改源代码。

【问题讨论】:

  • 不应该这样做。如果它很慢,这不会使它更快。更频繁地触发 GC 可能不会提高性能,它会浪费时间遍历整个堆,只收集一些未使用的项目。
  • @delnan 我所知道的是游戏会随着时间的推移变慢,然后随机加速。这种缓慢持续了几个级别,直到 GC 运行,然后它迅速加速。 GC 似乎真的很有帮助
  • 我对此没有异议。但是你只能在另一个收集的开销超过它的好处之前频繁地收集它,而这个最佳点很可能是 GC 的默认行为已经存在的地方。想象一下极端情况,每次分配一个集合。它会尽可能降低内存使用率,但会花费 90% 的时间来运行 GC。
  • @delnan 我不会一直点击“运行 GC”,只是在它变慢的时候。最多每个级别一次(每个级别创建大量对象:气球+镜头)。
  • 有趣的是,在“Bloon TD”的后期,他们拿游戏的速度开玩笑。 “不是游戏慢下来,而是你的思维加速了。”如果记忆对我有用,他们甚至将其与子弹时间进行比较。我不确定垃圾收集是否是这里的问题,而是游戏在屏幕上放置了太多对象。

标签: flash apache-flex actionscript-3 garbage-collection


【解决方案1】:

没有办法,而且真的不是你需要的。强制 GC 运行实际上会使事情变得更糟。您看到的那些随机减速实际上可能是 GC 已经在运行。

消除这些减速的方法是通过这样一种方式进行编程,即永远不会在更新函数中分配或释放内存。预先做好所有你需要的引用,永远不要为空任何东西(因为这使它可用于收集),并且总是在主游戏循环中重用对象。游戏结束后有足够的时间进行清理或重新实例化。

【讨论】:

    【解决方案2】:

    据我所知,没有办法在 actionscript 中强制 GC。不是来自代码本身或周围的浏览器。

    * 编辑 *

    好的,有一种方法 - 但你不应该使用(并且不能在 flashplayer 的发布版本中)它。

    更多,这里: Force Garbage Collection in AS3?

    【讨论】:

    • 你可以,但你不应该。 :)
    • 原始问题链接到stackoverflow.com/questions/192373/…,它记录了 System.gc();这是强制垃圾收集的 ActionScript 代码。 [虽然只在调试器播放器中]
    • 啊...好吧,不知道 System.gc() 方法 - 但由于这里提到的所有要点stackoverflow.com/questions/192373/… 最好我从来不知道 ;)
    • System.gc 仅适用于调试,不适用于 Flash 播放器的发布版本。
    • 一般来说,如果你需要强制 gc,你就错了。是时候重构你的设计了。 :)
    猜你喜欢
    • 2015-02-12
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    相关资源
    最近更新 更多