Я создаю приложение Air, которое из-за рабочего процесса аниматоров должно загружать большое количество внешних файлов swf
.У меня есть ошибка утечки памяти/мусора?
Я загружаю их все через объекты FileStream/Loader в процессе загрузки, а затем сохраняю их в объекте для дальнейшего использования.
В тот момент, когда они загружаются, я использую команду gotoAndStop(1)
, чтобы заставить их остановить цикл (исходные файлы не имеют никаких скриптов).
После процесса загрузки я вижу, что системная память идет медленно, но последовательно вверх. Когда я вручную вызываю сбор мусора с помощью команды System.gc()
, память снова очищается.
Если я позволяю приложению работать в течение нескольких часов, кажется, что сборщик мусора не запускается.
Любые идеи, что может быть проблемой? Или я должен просто забыть об этом и просто изредка запускать System.gc()
вручную?
Большое спасибо!
Вы должны использовать профилировщик памяти. Если вы не можете, попробуйте добавить 600x600 bitmapdata к экземпляру и создайте код, который инициализирует этот экземпляр, многократно используйте и удаляйте. Легкий трюк, чтобы увидеть, удален ли экземпляр из памяти. Кроме того, читайте о ApplicationDomain, потому что каждый swf может находиться в памяти, а загруженные классы могут не удаляться. – turbosqel
System.gc() может запускаться только в режиме отладки. –