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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 20.01.2009, 19:01
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 1  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
По умолчанию Высвобождение памяти при динамических загрузках фильмов

Есть сайт с самостоятельными страницами-флешками. Флешки полноценные, тяжелые, со своими динамическими загрузками других флешек и всяких графических и текстовых материалов, присутствует использование битмэпдаты.
Понадобилось сделать проектор - локальную версию этого сайта в exe-нике, где через меню можно открывать эти флешки. Загружаю с помощью MovieClipLoader одну флешку, потом, когда настает время грузить вторую, удаляю с помощью removeMovieClip первую и гружу вторую и т.д.
В виндах в Task Manager использование памяти постоянно растет. Как правильно очищать память, учитывая, что грузятся не просто графические объекты, а полноценные фильмы, в которых динамически происходит создание множества объектов и загрузка различного содержимого?
__________________
скриптограф

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

блогер
Регистрация: Mar 2008
Адрес: РФ, Санкт-Петербург
Сообщений: 2,272
Записей в блоге: 5
Отправить сообщение для gloomyBrain с помощью ICQ Отправить сообщение для gloomyBrain с помощью Skype™
Код AS1/AS2:
delete(то, от чего чистим память)
__________________
...вселенская грусть

Старый 05.02.2009, 23:26
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 3  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Все-таки попытаюсь спросить еще раз как высвобождать память. Начнем с легкого примера:

Код:
var arr:Array = [];
clip1.onRelease = function( ):Void {
	generateArr(100000);
};
clip2.onRelease = function( ):Void {	
	delArr();
};

function generateArr(n:Number):Void {
	for (var i:Number = 0; i < n; i++) {
		arr.push(Math.floor(Math.random() * n));
	}
}
function delArr():Void {	
	delete arr;
}
Смотрю в Windows Task Manager. Жму на clip1 память резко отжирается, жму на clip2 - с памятью ничего не происходит, жду долго - ноль эффекта. Но, если нажать еще раз на clip1, то память сокращается, но на примерно вдвое меньшее число, чем то число, на которое она увеличилась при нажатии на clip1 - этого я вообще понять не могу, ибо для меня это как-то все алогично...
__________________
скриптограф

Старый 05.02.2009, 23:29
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 4  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
Есть мнение, что GC работет по хитрому алгоритму.
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

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

Регистрация: Sep 2002
Сообщений: 30,787
Цитата:
Сообщение от dimarik Посмотреть сообщение
Есть мнение, что GC работет по хитрому алгоритму.
Он настолько хитер, что практически всегда ничего не делает

Старый 05.02.2009, 23:55
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 6  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
У меня взрывается мозг, когда я начинаю думать о том, как мне не захламлять память и удалять все, что можно и нужно удалить. Я не понимаю как это работает - объясните пожалуйста подробно кто-нибудь.
__________________
скриптограф

Старый 05.02.2009, 23:59
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 7  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
Незнаю на сколько он хитер но у меня все освобаждается. И как не странно в ваших таймзеро и дестени тоже :/

Код AS1/AS2:
var arr:Array = [];
 
for(var i:Number = 0; i<1000000; i++)
{
	arr.push(i);
}
 
_root.onMouseDown = function():Void
{
	delete arr;
	delete i;
 
	var str:String = ''
	for(var vr in _root)
		str += vr+'='+_root[vr]+'\n';
	mx.controls.Alert.show(arr+'\n'+str, 'array');
}
Когда мусоршик в очередной раз собирает мусор и на обьект нету никаких ссылок он удаляет этот обьект из памяти.
По мне так лучше б C/C++ подобие

Старый 06.02.2009, 00:29
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 8  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
qazwsx, странно это как-то все... не возвернул опять же 4 метра памяти из 10 отъетой в вашем примере...
__________________
скриптограф

Старый 06.02.2009, 00:40
qazwsx вне форума Посмотреть профиль Найти все сообщения от qazwsx
  № 9  
Ответить с цитированием
qazwsx
Banned
[+5 15.02.09]
[++5 15.02.09]

Регистрация: Mar 2008
Адрес: Krasnoyarsk
Сообщений: 587
У меня сьедается ~80 мегобайт и освобождается столько же. До запуска 100мег занято, до нажатия 170-180, после нажатия ~100.

Старый 06.02.2009, 00:48
orcpochta вне форума Посмотреть профиль Отправить личное сообщение для orcpochta Найти все сообщения от orcpochta
  № 10  
Ответить с цитированием
orcpochta

Регистрация: Feb 2008
Сообщений: 890
Цитата:
Сообщение от qazwsx Посмотреть сообщение
У меня сьедается ~80 мегобайт и освобождается столько же. До запуска 100мег занято, до нажатия 170-180, после нажатия ~100.
толи я копипастнул до вашей правки, толи я сам цикл с миллиона до ста тысяч убрал, короче, эффект все тоже самое, только умноженное в 10 раз получается примерно...
т.е. 80 с чем-то метров отжирает, 30 с чем-то взад не возвращает
__________________
скриптограф

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

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

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


 


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


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