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

Вернуться   Форум Flasher.ru > Блоги > noName

Оценить эту запись

Вызов сборщика мусора (FP10)

Запись от silin размещена 02.07.2009 в 19:43
Обновил(-а) silin 04.07.2009 в 20:53

можно сказать официальный запуск сборщика мусора за счет 10-чного Loader.unloadAndStop: грузим в лоадер 'пустой' gif (который здесь же в классе и храним) и тут же выгружаем с помощью unloadAndStop, в результате запускается GC, все.
Естественно, работа GC дело затратное и использовать такую утилиту вместо грамотной отписки листенеров или удаления объектов дело сомнительное, но в критических местах почему бы и не воткнуть..
примерчик
Код AS3:
package silin.utils 
{
 
	/**
	 * принудительный вызов GC
	 * FP10+
	 * @author silin
	 */
	public function forceGC():void 
	{
		Forcer.force();
	}
 
}
 
import flash.display.Loader;
import flash.events.Event;
import flash.utils.ByteArray;
class Forcer
{
	//лоадер
	private static const LOADER:Loader = new Loader();
	//'пустой' gif
	private static const GIF:Array = [
		71, 73, 70, 56, 57, 97, 1, 0, 1, 0, -128, 0, 0, -1, -1, -1, 0, 0, 0, 33, 
		-7, 4, 0, 7, 0, -1, 0, 44, 0, 0, 0, 0, 1, 0, 1, 0, 0, 2, 2, 68, 1, 0, 59
	];
 
 
	//стартует загрузку в лоадер гифа
	public static function force():void
	{
 
		LOADER.contentLoaderInfo.addEventListener(Event.COMPLETE, loaderComplteteHandler);
 
		var ba:ByteArray = new ByteArray();
		for (var i:int = 0; i < GIF.length; i++) 
		{
			ba.writeByte(GIF[i]);
		}
		LOADER.loadBytes(ba);
	}
	//запускает unloadAndStop по окончании загрузки
	private static function loaderComplteteHandler(evnt:Event):void 
	{
		LOADER.contentLoaderInfo.removeEventListener(Event.COMPLETE, loaderComplteteHandler);
		try 
		{
			LOADER.unloadAndStop();
		}catch (err:Error) 
		{ 
			trace( "forceGC: FP10+ is required" );
		}
	}
}
Размещено в AS3
Комментарии 11 Отправить другу ссылку на эту запись
Всего комментариев 11

Комментарии

Старый 02.07.2009 23:42 iNils вне форума
iNils
 
Аватар для iNils
А в чем смысл сокращения event до evnt? Ну и err заодно?
Старый 03.07.2009 15:31 silin вне форума
silin
 
Аватар для silin
ну это реальная экономия 2-х байт, например
как-то вообще не задумывался над этим, на всех не угодишь
ты у Филиппа с Микой не спрашивал почему у них в шаблонах только e ?
Старый 03.07.2009 16:43 Герыч вне форума
Герыч
 
Аватар для Герыч
где-то читал, что чем короче имя переменной во флэше, тем он быстрее с ней работает.. как-бы глупость, но видимо это так)
Старый 04.07.2009 01:28 iNils вне форума
iNils
 
Аватар для iNils
Экономия двух байт?
Быстрее работает?
Пишите на ассемблере.
Старый 04.07.2009 14:59 silin вне форума
silin
 
Аватар для silin
сори, это я так плоско пошутил, полагая, что, сегодня уже не придет никому в голову экономить на именах (тем более локальных, которые и во флешку-то не попадают)

ps: ты пробовал писать флешки на ассемблере ?
Старый 05.07.2009 16:45 iNils вне форума
iNils
 
Аватар для iNils
В смысле мтаском? Нет, только правки пару раз вносил, но уже непосредственно в байт-код (на форуме пример выкладывал со сглаживание шрифта).
Старый 05.07.2009 17:16 silin вне форума
silin
 
Аватар для silin
сори, но это я опять типа сумничал.., в смысле ну что ты ерунду-то гонишь "пишите на ассемблере" ?
кстати, мтаск не умеет такое,
flasm, видимо, имеется ввиду, но энтузиастов пишущих сразу байткод что-то все равно не видать
Старый 05.07.2009 18:17 iNils вне форума
iNils
 
Аватар для iNils
Точно, фласмом. Сорри, выходные - пью
Я вообще про асм саркзмничал, флеш исполняется виртуальной машиной, такие мелочи в общей работе роли не играют. И вроде это Ив слова: сначала пишем, чтобы работало, потом оптимизируем.
Старый 25.10.2009 11:57 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
Я вот думаю...
если в базовом классе сделать, отписавшись там от всех событий:
Код AS3:
while (numChildren) removeChildAt(0);
Force.force();
и вызывать конструктор базового класса, то при условии что все переменные инициализируются в конструкторе и методах вызывающихся оттуда мы получим как бы "закрытие-открытие" фп? (ну, я про отсутствие мелочей вроде статик переменных и прочего)
Старый 25.10.2009 14:34 silin вне форума
silin
 
Аватар для silin
>>и вызывать конструктор базового класса, то..
без обид, но бред ведь..
если уж надо такое, то можно в документ классе оставить только лоадер (и что еще нужно неперезагружаемое), в котором и держать флешку, при необходимости перезагружать..

или еще проще: положить перезагружаемую часть в свой класс и пересоздавать экхемпляр
Обновил(-а) silin 25.10.2009 в 15:26
Старый 25.10.2009 17:17 Psycho Tiger вне форума
Psycho Tiger
 
Аватар для Psycho Tiger
В целом да, бред, мне просто возможность это осуществить.
Порой убиваю много времени из за того, что забываю где то занулить ссылку или событие - и артефакты от этого в играх лезут где нибудь. Если такое появится вновь, то GC в принципе поможет решить эту проблему.
Знаю, что не хорошо, но если очень хочется, то можно
 
Последние записи от silin

 


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


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