#actionscript-3 #apache-flex #air
#actionscript-3 #apache-flex #air
Вопрос:
Я создаю настольное приложение Adobe AIR с Flash CS5, в котором широко используются bitmapdata, bytearrays и строки base64. Через некоторое время использование памяти приложения удваивается.
Рекомендуется ли использовать system.gc() для освобождения памяти в этот момент или это плохая практика?
Спасибо.
Ответ №1:
system.gc — это функция только для отладки в AIR и Flash player. Я думаю, что лучше переработать bitmapdata и другие объекты, если вы можете избежать gc, а если нет, вызовите bitmapdata.dispose() и bitmapdata = null, как только вы закончите их использовать.
Если у вас есть растровые объекты одинакового размера в разное время в вашем проекте, вы можете использовать один и тот же экземпляр BitmapData для работы с ними. Это похоже на то, как itemRenderers перерабатывает элементы или как даже другие платформы, такие как UITableViewController iOS, перерабатывают / повторно используют UITableViewCell . Сбор мусора — не панацея, его следует использовать, когда простота программирования важнее производительности.
Комментарии:
1. Не могли бы вы немного подробнее объяснить, что вы подразумеваете под переработкой bitmapdata и других объектов?
2. Не уверен, что только отладка, например, в установленном приложении Adobe AIR для рабочего стола. Из системной документации: «или в установленном приложении» «Только для версии отладчика Flash Player и приложений AIR. В приложении AIR метод System.gc() включен только для содержимого, запущенного в средстве запуска отладки AIR (ADL), или, в установленном приложении, для содержимого в изолированной среде безопасности приложений. »
Ответ №2:
Вам не нужно вызывать system.gc
, поскольку он будет вызываться автоматически в циклах простоя средой выполнения Flash. Если вы вызовете это самостоятельно, это может привести к замедлению работы вашего приложения без реальной выгоды.
Когда вам больше не нужны BitmapData или ByteArray, просто вызовите BitmapData.dispose()
или ByteArray.clear()
.