2011-10-18 43 views
0

我正在构建Adobe Flash桌面应用程序,并使用Flash CS5,这使得大量使用bitmapdata,bytearrays和base64字符串。一段时间后,应用程序的内存使用量翻了一番。Adob​​e AIR - 垃圾回收和system.gc()

是否建议使用system.gc()在这一点上释放内存或者是不好的做法?

谢谢。

回答

3

system.gc是AIR和Flash播放器中的调试唯一功能。我认为最好的办法是回收bitmapdata和其他对象,如果可以避免gc,并且一旦完成使用,就不要调用bitmapdata.dispose()和bitmapdata = null。

如果在项目的不同时间您有相同大小的位图对象,则可以使用相同的BitmapData实例对它们进行操作。这与ItemRenderers如何回收项目类似,或者iOS的UITableViewController等其他平台如何回收/重用UITableViewCell。垃圾收集不是万能的,当简单的可编程性比性能更重要时,应该使用垃圾收集。

+0

你可以请进一步解释一下你的意思是** recyle ** bitmapdata和其他对象? – Tom

+0

不确定它是否仅调试,例如,在安装的Adobe AIR桌面应用程序中。从系统文档: “或者在安装的applcation” “仅适用于Flash Player的调试版和AIR应用程序在AIR应用程序中,System.gc()方法中的内容时,才会启用在AIR运行调试启动器(ADL),或者在已安装的应用程序中,位于应用程序安全沙箱中的内容中。“ – Aaron

1

您不需要拨打system.gc,因为它将在Flash运行时在空闲周期内自动调用。如果你自己打电话给你,你最终可能会放慢你的应用程序而没有真正的收益。

当你不需要BitmapData或为ByteArray了,只需拨打BitmapData.dispose()ByteArray.clear()