【问题标题】:Adobe AIR - Garbage collection and system.gc()Adobe AIR - 垃圾收集和 system.gc()
【发布时间】:2011-10-19 17:48:34
【问题描述】:

我正在使用 Flash CS5 构建一个 Adob​​e AIR 桌面应用程序,该应用程序大量使用位图数据、字节数组和 base64 字符串。一段时间后,应用程序的内存使用量翻了一番。

是否建议在那时使用 system.gc() 来释放内存,或者这是一种不好的做法?

谢谢。

【问题讨论】:

    标签: actionscript-3 apache-flex air


    【解决方案1】:

    system.gc 是 AIR 和 Flash 播放器中的调试功能。我认为最好的办法是回收 bitmapdata 和其他对象,如果可以避免 gc,如果没有,请在使用完后立即调用 bitmapdata.dispose() 和 bitmapdata = null。

    如果您在项目中的不同时间有相同大小的位图对象,您可以使用同一个 BitmapData 实例对它们进行操作。这类似于 ItemRenderers 如何回收项目,或者甚至像 iOS 的 UITableViewController 这样的其他平台如何回收/重用 UITableViewCell。垃圾回收不是万能的,它应该在易于编程比性能更重要的情况下使用。

    【讨论】:

    • 您能否进一步解释一下您所说的 recyle 位图数据和其他对象是什么意思?
    • 不确定它是否仅用于调试,例如在已安装的桌面版 Adob​​e AIR 应用程序中。来自系统文档:“或者,在已安装的应用程序中”“仅适用于 Flash Player 调试器版本和 AIR 应用程序。在 AIR 应用程序中,System.gc() 方法仅在 AIR Debug Launcher (ADL) 中运行的内容中启用) 或者,在已安装的应用程序中,在应用程序安全沙箱的内容中。”
    【解决方案2】:

    您无需调用system.gc,因为它会在空闲周期由 Flash 运行时自动调用。如果您自己调用它,您最终可能会拖慢您的应用程序而没有真正的收益。

    当您不再需要 BitmapData 或 ByteArray 时,只需调用 BitmapData.dispose()ByteArray.clear()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 2012-03-21
      • 2013-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多