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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 15.05.2006, 21:04
Antares вне форума Посмотреть профиль Найти все сообщения от Antares
  № 31  
Ответить с цитированием
Antares
Banned
[+1 16.05.2006]
[++1 16.05.2006]
[+ 1 21.05.06]
[++ за хамство]
[+1 21.05.2006]
 
Аватар для Antares

Регистрация: Dec 2003
Сообщений: 3,925
Цитата:
Сообщение от Homo Sapiens
2 All, ну бог знает, я не знаю наверняка, вполне возможно, что delete работает действительно быстрее...
Это же базовый принцип работы garbage collector-а: есть ссылка на объект -- он живет. null -- это значение, такое же, как function() {...}

Так почему gc должен высвобождать ресурсы?

Старый 15.05.2006, 21:12
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 32  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,787
Antares, ок. Но есть утверждение, что после delete создание нового onEnterFrame займёт времени больше, чем присваивание другого значения...

Старый 15.05.2006, 22:47
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 33  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
null это значение??? null - это null. 0 - значение
__________________
Всё гениальное просто.

Старый 15.05.2006, 23:25
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 34  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от __etc
Antares, ок. Но есть утверждение, что после delete создание нового onEnterFrame займёт времени больше, чем присваивание другого значения...
Все запускалось по 5 раз в flash mx.
Присваивание другого значения:
Код:
f = function () {
	delete this.onEnterFrame;
};
for (i = 0; i < 2000; i++) {
	this.createEmptyMovieClip ("mc" + i, i);
	this["mc" + i].onEnterFrame = null;
}
t1 = getTimer ();
for (i = 0; i < 2000; i++) {
	this["mc" + i].onEnterFrame = f;
}
t2 = getTimer ();
trace (t2 - t1);
Получил: 142, 141, 143, 149, 142

создаем новый onEnterFrame:
Код:
f = function () {
	delete this.onEnterFrame;
};
for (i = 0; i < 2000; i++) {
	this.createEmptyMovieClip ("mc" + i, i);
}
t1 = getTimer ();
for (i = 0; i < 2000; i++) {
	this["mc" + i].onEnterFrame = f;
}
t2 = getTimer ();
trace (t2 - t1);
Получил: 153, 155, 154, 155, 153.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 15.05.2006, 23:31
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 35  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
Код:
var allObjects:Array = new Array();

function CreateObject():Object
{
	var obj:Object = new Object();
	for(var i = 0; i < 100; i++)
	{
		obj["prop" + i] = new Object();
		obj["prop" + i].str = i + ". this is string number " + i;
		obj["prop" + i].numb = Math.round(Math.random() * 0xFFFFF);
	}
	
	obj.Clear = function():Void
	{
		for(var i = 0; i < 100; i++)
		{
			this["prop" + i].str = null;
			this["prop" + i].numb = null;
		}
	}
	return obj;
}

function AddObjects():Void
{
	var i = 0, max = Math.round(Math.random() * 0xFF);
	for(; i < max; i++)
	{
		allObjects.push(CreateObject());
	}
}

var pos = 0;
function ClearProperties():Void
{
	alert("Clear");
	var max = pos + 0xFFFFF;
	//var max = pos + 0xFFF;
	for(; pos < max; pos++)
	{
		if(pos >= allObjects.length)
		{
			pos = 0;
			max = 0;
		}
		allObjects[pos] = null;
                          //delete allObjects[pos];
	}
}

function StopAll():Void
{
	clearInterval(interAdd);
	clearInterval(interClear);
	clearInterval(interStop);
	clearInterval(interUpdate);
}

function Update():Void
{
	info.text = "Количество элементов: " + allObjects.length;
	info.text += "\nПозиция: " + pos;
}

var interAdd = setInterval(AddObjects, 1000);
var interClear = setInterval(ClearProperties, 10000);
var interStop = setInterval(StopAll, 15 * 60000);
var interUpdate = setInterval(Update, 2000);
Запускаем, обращаем внимание на прирост памяти.

Потом раскоментируем меняем местами закомментированные строки. Особенно хорошо видно при больших значениях (> 10000).

P.S. Текстовое поле info создаём ручками
__________________
Всё гениальное просто.


Последний раз редактировалось Homo Sapiens; 15.05.2006 в 23:35.
Старый 15.05.2006, 23:36
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 36  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
Пример достаточно нагляден. delete работает на самом деле ощутимо быстрее чем присвоение null. Но присвоение null тоже работает...
__________________
Всё гениальное просто.

Старый 15.05.2006, 23:51
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 37  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
Код:
var allObjects:Array = new Array();

function CreateObject():Object
{
	var obj:Object = new Object();
	for(var i = 0; i < 100; i++)
	{
		obj["prop" + i] = new Object();
		obj["prop" + i].str = i + ". this is string number " + i;
		obj["prop" + i].numb = Math.round(Math.random() * 0xFFFFF);
	}
	
	obj.Clear = function():Void
	{
		for(var i = 0; i < 100; i++)
		{
			this["prop" + i].str = null;
			this["prop" + i].numb = null;
		}
	}
	return obj;
}

function AddObjects():Void
{
	var i = 0, max = Math.round(Math.random() * 0xFF);
	for(; i < max; i++)
	{
		allObjects.push(CreateObject());
	}
}

var pos = 0;
function ClearProperties():Void
{
	alert("Clear");
	var max = pos + 0xFFFFF;
	for(; pos < max; pos++)
	{
		if(pos >= allObjects.length)
		{
			pos = 0;
			max = 0;
		}
		//allObjects[pos] = null;
		delete allObjects[pos];
	}
}

function StopAll():Void
{
	clearInterval(interAdd);
	clearInterval(interClear);
	clearInterval(interStop);
	clearInterval(interUpdate);
	
	info.text += "\nКонец работы, заполнение массива";
	
	var len = allObjects.length;
	for(var i = 0; i < len; i++)
	{
		allObjects[i] = CreateObject();
	}
}

function Update():Void
{
	info.text = "Количество элементов: " + allObjects.length;
	info.text += "\nПозиция: " + pos;
}

var interAdd = setInterval(AddObjects, 1000);
var interClear = setInterval(ClearProperties, 10000);
var interStop = setInterval(StopAll, 3 * 60000);
var interUpdate = setInterval(Update, 2000);
Ещё один тестик, не рекомендую если меньше гига оперативки. Кстати, все тесты исполнялись с приоритетом Realtime
__________________
Всё гениальное просто.

Старый 15.05.2006, 23:52
Madasan вне форума Посмотреть профиль Отправить личное сообщение для Madasan Найти все сообщения от Madasan
  № 38  
Ответить с цитированием
Madasan
 
Аватар для Madasan

Регистрация: Jun 2005
Адрес: в Питере
Сообщений: 981
Цитата:
Сообщение от Homo Sapiens
null это значение??? null - это null. 0 - значение
null - это значение, которое указывает на отсутствие этого самого значения. То есть тут получается как бы отсутсвие значения - это тоже значение, то есть наша переменная значения как такового не имеет, но все таки она не undefined !
__________________
Делай всё быстро, но не торопись!.._/*o|o*\_.

Старый 15.05.2006, 23:55
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 39  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
Код:
var allObjects:Array = new Array();

var testObj:Object = new Object();
testObj.prop = 1;

var realVar:Number = 1;

function CreateObject():Object
{
	var obj:Object = new Object();
	for(var i = 0; i < 100; i++)
	{
		obj["prop" + i] = new Object();
		obj["prop" + i].str = i + ". this is string number " + i;
		obj["prop" + i].numb = Math.round(Math.random() * 0xFFFFF);
	}
	
	obj.Clear = function():Void
	{
		for(var i = 0; i < 100; i++)
		{
			this["prop" + i].str = null;
			this["prop" + i].numb = null;
		}
	}
	return obj;
}

function AddObjects():Void
{
	var i = 0, max = Math.round(Math.random() * 0xFF);
	for(; i < max; i++)
	{
		allObjects.push(CreateObject());
	}
}

var pos = 0;
function ClearProperties():Void
{
	alert("Clear");
	var max = pos + 0xFFFFF;
	for(; pos < max; pos++)
	{
		if(pos >= allObjects.length)
		{
			pos = 0;
			max = 0;
		}
		//allObjects[pos] = null;
		//delete allObjects[pos];
		//allObjects[pos] = testObj;
		allObjects[pos] = realVar;
	}
}

function StopAll():Void
{
	clearInterval(interAdd);
	clearInterval(interClear);
	clearInterval(interStop);
	clearInterval(interUpdate);
	
	info.text += "\nКонец работы, заполнение массива";
	
	var len = allObjects.length;
	for(var i = 0; i < len; i++)
	{
		allObjects[i] = CreateObject();
	}
}

function Update():Void
{
	info.text = "Количество элементов: " + allObjects.length;
	info.text += "\nПозиция: " + pos;
}

var interAdd = setInterval(AddObjects, 1000);
var interClear = setInterval(ClearProperties, 10000);
var interStop = setInterval(StopAll, 3 * 60000);
var interUpdate = setInterval(Update, 2000);
Ну и самый последний вариант, что называется для полноты картины...
__________________
Всё гениальное просто.

Старый 15.05.2006, 23:58
Homo Sapiens вне форума Посмотреть профиль Отправить личное сообщение для Homo Sapiens Посетить домашнюю страницу Homo Sapiens Найти все сообщения от Homo Sapiens
  № 40  
Ответить с цитированием
Homo Sapiens
 
Аватар для Homo Sapiens

Регистрация: Nov 2004
Адрес: Санкт-Петербург
Сообщений: 751
undefined во Flash сделано исключительно для удобства дизайнеров, чтобы им не напрягаться. Буквально это значит "не определена". В нормальных языках программирования, попытка использовать неопределённую переменную приводит к ошибке компиляции. И как правило, эти языки в принципе не дают объявить неинициализированную ссылочную переменную, требуя присвоить null, если пока нельзя определить конкретную цель для указателя.
__________________
Всё гениальное просто.

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:04.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

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


 


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


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