Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 13.12.2011, 15:24
Inet_PC вне форума Посмотреть профиль Отправить личное сообщение для Inet_PC Посетить домашнюю страницу Inet_PC Найти все сообщения от Inet_PC
  № 11  
Ответить с цитированием
Inet_PC
 
Аватар для Inet_PC

Регистрация: Feb 2009
Адрес: Гы...поди, найди!
Сообщений: 853
Записей в блоге: 1
На тормоз в автомобиле жать
Цитата:
не обязательно совершенно
ибо бензин рано или поздно кончится.
Цитата:
Слушатель клика не грузит память
еще как отводится. ED хранит эту инфу в своих дербях, а раз хранит значит и память на это расходуется.
Код AS3:
кастомЭвент, который может произойти от чего угодно
Кто мне запретит 1000-ми рассылать самому MouseEvent ? И все кто подписаны будут их ловить.
__________________
http://www.chessmax.ru

Старый 13.12.2011, 17:36
gloomyBrain вне форума Посмотреть профиль Отправить личное сообщение для gloomyBrain Найти все сообщения от gloomyBrain
  № 12  
Ответить с цитированием
gloomyBrain
 
Аватар для gloomyBrain

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Цитата:
и даже не кастомЭвент, который может произойти от чего угодно
Сезон тупняков на flasher.ru продолжается...
__________________
...вселенская грусть

Старый 13.12.2011, 17:55
fish_r вне форума Посмотреть профиль Отправить личное сообщение для fish_r Посетить домашнюю страницу fish_r Найти все сообщения от fish_r
  № 13  
Ответить с цитированием
fish_r
 
Аватар для fish_r

блогер
Регистрация: Jan 2011
Сообщений: 1,162
Записей в блоге: 4
Цитата:
Сообщение от gloomyBrain Посмотреть сообщение
Сезон тупняков на flasher.ru продолжается...
))


тем, не менее, где-то здесь @etc (могу ошибаться, но кажется все-таки @etc) писал, что не обязательно отписывать слушателей внутренних событий в удаляемом объекте... тоже о чём то народ спорил...

Но, я всё равно отписываю всех слушателей - так, на всякий случай, в порядке армейского ... а

Можно проверить профайлером, это вроде не сложно.

Старый 13.12.2011, 20:31
ChuwY вне форума Посмотреть профиль Отправить личное сообщение для ChuwY Посетить домашнюю страницу ChuwY Найти все сообщения от ChuwY
  № 14  
Ответить с цитированием
ChuwY
 
Аватар для ChuwY

Регистрация: Nov 2009
Адрес: Тула / Москва
Сообщений: 734
Отправить сообщение для ChuwY с помощью ICQ Отправить сообщение для ChuwY с помощью Skype™
Когда избавлялся от утечек памяти дошел до того, что даже для самых мелких вещей сделал метод destruct(); в котором сносились все листенеры со всех полей, ремувились ДО, вызывался деструкт младших уровней и занулялись ссылки. Только после этого получилось очищать полностью память.
Когда на сцене был, а потом сплыл многоярусный контейнер, он тоже любит повиснуть иногда в памяти, если его не разобрать на кусочки.

Вот пример (смотрите в приложении):
Классы Level0-1-2-3 -- наследники спрайта с пустым телом.

Код AS3:
package {
  import flash.display.DisplayObject;
  import flash.display.DisplayObjectContainer;
  import flash.display.Sprite;
  import flash.utils.getDefinitionByName;
  import flash.utils.setTimeout;
 
  Level0;
  Level1;
  Level2;
  Level3;
  public class DOCTest extends Sprite {
    public static const MAX_DEEP : int = 3;
    public static const WIDTH : int = 10;
    public function DOCTest() {
      fill(0, this);
      setTimeout(easyClear, 5000);
      //setTimeout(fullClear, 5000, this);
    }
 
    private function fill(deep : int, container : DisplayObjectContainer):void{
      for(var i : int = 0; i < WIDTH; i++){
        var DOCLASS : Class = getDefinitionByName("Level"+deep) as Class;
        var DO : DisplayObjectContainer = new DOCLASS();
        trace("DO = " + DO);
        container.addChild(DO);
        if(deep < MAX_DEEP){
          fill(deep+1,DO);
        }
      }
 
    }
 
    private function easyClear():void{
      while(numChildren){
        removeChildAt(0);
      }
    }
 
    private function fullClear(container : DisplayObjectContainer):void{
      while(container.numChildren){
        var DOC: DisplayObjectContainer = container.removeChildAt(0) as DisplayObjectContainer;
        if(DOC){
          fullClear(DOC);
        }
      }  
    }
  }
}
При использовании функции, которая удаляет только объекты верхнего уровня получаем такой снимок:
http://*************/s/1oHmT -- если в памяти повис объект нулевого уровня, то тащит за собой цепочку детей.

А если рекурсивно разделить все от всего, то вот такой (который тоже не идеален. почему -- увы, не знаю, надеюсь, кто-нибудь объяснит)
http://*************/s/1oHkQ

Так что очистить все слушатели, задеструктить и занулить все, до чего дотянешься -- святое дело каждого.
__________________
9 из 10 голосов в моей голове сказали наркотикам "НЕТ"
Мои ачивки: художник-паразит.


Последний раз редактировалось ChuwY; 13.12.2011 в 20:36.
Создать новую тему Ответ Часовой пояс GMT +4, время: 22:39.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 22:39.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.