![]() |
|
||||||||||
|
|||||
|
Регистрация: Feb 2009
Сообщений: 141
|
Хочу еще раз затронуть тему ликов памяти при выполнении флеш приложения.
Я думаю, что не все программисты проверяют свои разработки на подобные баги или часто используют профайлер? Особенно остро этот вопрос стоит, когда юзается более менее большое приложение и достаточно долго без его перезагрузки. Я довольно часто ощущаю подобные неудобства, работая с различными приложениями, буквально с каждой минуты его работы, заметна разница в падении производительности работы приложения. Все эти неудобства в большинстве случаев вызваны большим количеством динамических событий. Большое число временных объектов подписываются на события, которые ожидают прослушивания, но не дождавшись их, далеко наверху удаляется объект, который содержит в себе все это и не может удалиться из памяти, так как по прежнему ожидает n-ое кол-во прослушиваний. Так как же избежать такой ситуации, когда мы удаляем объект на порядок выше в структуре и не можем (точнее можем, но окольными путями) отписать все его потроха от событий? В каждом классе, где используются динамические события, да и вобще события, от которых нужно отписаться при удалении этого экземпляра я использую следующий простой способ. public class Test extends Sprite { public function Test() { super(); this.addEventListener(Event.REMOVED_FROM_STAGE, __thisRemove); } private function __thisRemove(e:Event):void { this.removeEventListener(Event.REMOVED_FROM_STAGE, __thisRemove); //Отписываемся от динамических событий } } Или даже, возможно, я использую велосипед, кто как выходит из положения, можете поделиться опытом? Вопрос я этот поднял потому, что программируя несколько лет и разрабатывая приложения, где лики памяти были ощутимы, эти две строчки кода в тот момент для меня не были очевидными. |
![]() |
Часовой пояс GMT +4, время: 03:37. |
|
|
« Предыдущая тема | Следующая тема » |
|
|