|
|
|||||
Регистрация: Apr 2011
Сообщений: 38
|
удаление объекта из памяти
здравствуйте! есть такая проблема, при создании большого кол-ва объектов (bitmapData к примеру), сильно приложение начинает тормозить (делаем игру). перелопатил много материала на иностранных форумах, где было сказано, что чтобы удалить из памяти какой-либо объект, нужно убрать все references на него (ссылки, наверное), то есть листенеры, и т.д. однако даже такой пример не работает как надо:
import flash.display.Bitmap; import flash.display.BitmapData; var myShapeB:BitmapData; b.addEventListener(MouseEvent.CLICK, fn_add); c.addEventListener(MouseEvent.CLICK, fn_remove); function fn_add(e:Event) { myShapeB = new BitmapData(2000,2000,true,0xFFDD0000); b.removeEventListener(MouseEvent.CLICK, fn); } function fn_remove(e:Event) { myShapeB = null; c.removeEventListener(MouseEvent.CLICK, fn2); } заранее спасибо! |
|
|||||
Lorem ipsum
|
__________________
Поймай яблоко 2! Последний раз редактировалось Zebestov; 08.04.2011 в 16:18. |
|
|||||
Регистрация: Apr 2011
Сообщений: 38
|
спаибо, но здесь bitmapData просто как пример. а если там объект MovieClip вместо bitmapData ?
|
|
|||||
Lorem ipsum
|
Тогда память будет расти до очередного обхода доктора GC.
И да — DisplayObject-ы не забываем к тому же удалять из списка отображения.
__________________
Поймай яблоко 2! |
|
|||||
Регистрация: Apr 2011
Сообщений: 38
|
это само собой, removeChild используем. а с какой примерно периодичностью запускается GC?
и еще пример - если в MovieClip куча всякого понапихано, например кнопки, поля TLF, опять же Bitmap, их как-то по отдельности нужно обрабатывать? Добавлено через 1 час 57 минут интересное наблюдение. есть код: addEventListener(Event.ENTER_FRAME, function(){ trace(System.totalMemory); } ); var container = new MovieClip; addChild(container ); var lHome:Loader = new Loader(); var urlrHome:URLRequest = new URLRequest("test2.swf"); function c_load (e:Event){ lHome.load(urlrHome); lHome.contentLoaderInfo.addEventListener(Event.COMPLETE, movieLoaded); } function movieLoaded(event:Event):void { container.addChild(lHome); lHome.contentLoaderInfo.removeEventListener(Event.COMPLETE, movieLoaded); } function c_unload(e:Event){ lHome.unloadAndStop(false); container.removeChild(lHome); lHome = null; container = null; try { new LocalConnection().connect('foo'); new LocalConnection().connect('foo'); } catch (e:*) {} } try { new LocalConnection().connect('foo'); new LocalConnection().connect('foo'); } catch (e:*) {} заранее спасибо! Добавлено через 2 часа 0 минут смена false на true в unloadAndStop ничего не меняет (хотя по умолчанию true) |
|
|||||
[+4 06.05.14]
|
Цитата:
Добавлено через 1 минуту lHome.unloadAndStop(false); // с параметром тру, идет запуск GC) |
|
|||||
Регистрация: Apr 2011
Сообщений: 38
|
ну вот к примеру у меня есть текстовое поле TLF. динамически созданное. removeChild запускаю, потом в null, однако память все равно не освобождается. со статическими полями вообще не понятно как работать. что ж такое
|
|
|||||
Регистрация: Apr 2011
Сообщений: 38
|
нашел способ для текстовых полей, нужно сначала весь текст оттуда убрать
|
Часовой пояс GMT +4, время: 15:55. |
|
« Предыдущая тема | Следующая тема » |
Теги |
bitmapdata , gc , memory leak |
|
|