【发布时间】:2011-10-19 17:48:34
【问题描述】:
我正在使用 Flash CS5 构建一个 Adobe AIR 桌面应用程序,该应用程序大量使用位图数据、字节数组和 base64 字符串。一段时间后,应用程序的内存使用量翻了一番。
是否建议在那时使用 system.gc() 来释放内存,或者这是一种不好的做法?
谢谢。
【问题讨论】:
标签: actionscript-3 apache-flex air
我正在使用 Flash CS5 构建一个 Adobe AIR 桌面应用程序,该应用程序大量使用位图数据、字节数组和 base64 字符串。一段时间后,应用程序的内存使用量翻了一番。
是否建议在那时使用 system.gc() 来释放内存,或者这是一种不好的做法?
谢谢。
【问题讨论】:
标签: actionscript-3 apache-flex air
system.gc 是 AIR 和 Flash 播放器中的调试功能。我认为最好的办法是回收 bitmapdata 和其他对象,如果可以避免 gc,如果没有,请在使用完后立即调用 bitmapdata.dispose() 和 bitmapdata = null。
如果您在项目中的不同时间有相同大小的位图对象,您可以使用同一个 BitmapData 实例对它们进行操作。这类似于 ItemRenderers 如何回收项目,或者甚至像 iOS 的 UITableViewController 这样的其他平台如何回收/重用 UITableViewCell。垃圾回收不是万能的,它应该在易于编程比性能更重要的情况下使用。
【讨论】:
您无需调用system.gc,因为它会在空闲周期由 Flash 运行时自动调用。如果您自己调用它,您最终可能会拖慢您的应用程序而没有真正的收益。
当您不再需要 BitmapData 或 ByteArray 时,只需调用 BitmapData.dispose() 或 ByteArray.clear()。
【讨论】: