![]() |
С тех пор как мы ловили RTE в релизной версии плеера, потому что в дебаговой этого RTE не было — я отношусь к версиям FP очень внимательно.
|
Если не вызвать принудительно GC, и подождать немножко пока сам запустится, то получим:
loader удаляется если описаны от всех слушателей и e.target.loader.content не находится в списке отображения; e.target.loader.content не находится в списке и без ссылки - тоже удаляется; loader удаляется, если на e.target.loader.content есть ссылка, не находится в списке отображения, обнулен; не удаляется loader, если не отписаться от слушателей; не удаляется loader, если на e.target.loader.content была ссылка за пределами функции, не удаляется loader, если e.target.loader.content находится в списке отображения но нет ссылки за пределами функции, вот так все печально. |
Прошу прощения, туплю =)
Цитата:
|
Всем привет! Пару дней сидел без интернета.
Цитата:
Цитата:
Цитата:
Цитата:
Цитата:
Вышли мы из функции, ссылка пропала. Цитата:
Дальше расскажу что происходит с loader при загрузке растровых изображений (JPEG, PNG, GIF). Эксперимент проводился с Adobe Flash Player 10.0 r45 debug. Результат исследований заставил задуматься. Пока существует ссылка на BitmapData контента (loader.content as Bitmap).bitmapData, (loaderInfo.content as Bitmap).bitmapData, жив и лоадер. Можно даже сделать ей dispose(), ничего не изменится. Скажу больше. Даже bitmapData.clone() не позволит удалиться лоадеру. Однако после bitmapData.draw() GC может удалить Loader. Код маленького эксперимента Код AS3:
|
Очень интересные выводы.
Могу сказать, что Код AS3:
Сейчас не очень много времени проверить вот какой факт: достаточно ли факта draw (даже без захвата пикселей) для удаления из памяти, достаточно ли снятия хотя бы одного пикселя с помощью draw, достаточно ли снятия больше половины пикселей. Практической ценности никакой, но интересно. Если не секрет, как ты догадался проверить удаляется ли после draw? Цитата:
|
dimarik, я же не с потолка написал случаи когда лоадер удаляется, а когда нет.
Проводил тесты по коду из этого же топика. Может просто нужно более подробно описать, как тот или иной тест проводился. |
VitaliyKrivtsov,
вот этот пункт у меня не работает Цитата:
Код AS3:
Добавлено через 7 минут Цитата:
Чем меньше слов new (и фабричных методов) в коде тем меньше вероятность утечек=) |
У вас ссылка contentLink в пределах поля класса есть, ее нужно будет удалить из списка отображения а потом занулить, когда bitmap уже будет не нужен, так же желатильно отписать от слушателей loader и занулить его, и тогда - будет удален и лоадер и битмап.
|
В том и дело, что если для каждой картинки создавать свой лоадер, то в памяти будет висеть и растр и лоадер. Однако если грузить картинки и, вообще, ресурсы, через ограниченное число лоадеров (речь идет именно об экземплярах класса Loader), то мы бережем память на getSize(new Loader()) * numКартинок - getSize(new Loader()) * numLoaders; Чем больше картинок, тем большая экономия.
|
Чаще всего загвоздка в том, что злые дяди забывают сделать для нас crossdomain.xml, и вытащить content "бережно" для памяти никак. (повторный loadBytes, по-сути, хак, и как правильное решение его рассматривать не стоит)
|
| Часовой пояс GMT +4, время: 02:24. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.