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

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

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от goodguy Посмотреть сообщение
2) dispose() не занулит картинку. Она так и останется висеть в памяти, пока не занулишь еще и ссылку на нее.
dispose удаляет содержимое картинки из памяти.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2011, 13:00
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 32  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Цитата:
dispose удаляет содержимое картинки из памяти.
Да это понятно, но тем не менее, по пока на изображение есть хоть одна ссылка, оно так и будет занимать то количество памяти, которое и занимало до вызова dispose(). О чем, собственно, говорит отладчик во флешдевелоп.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
Сообщение от goodguy Посмотреть сообщение
Да это понятно, но тем не менее, по пока на изображение есть хоть одна ссылка, оно так и будет занимать то количество памяти, которое и занимало до вызова dispose(). О чем, собственно, говорит отладчик во флешдевелоп.
Ничего подобного.
Простой тест.
Код AS3:
package {
	/*    IMPORT             *///{ /
	import flash.display.*;
	import flash.events.*;
	//}
	public class TestDispose extends Sprite {
		/*  - VAR PRIVATE        *///{ /
		private var _bitmap:Bitmap = null;
		//}
		/*  * CONSTRUCTOR *      *///{ /
		public function TestDispose () {
			_bitmap = new Bitmap ()
			addChild (_bitmap)
			stage.addEventListener (MouseEvent.CLICK, onClick)
		}
		//}
		/*    EVENT              *///{ /
		private function onClick (event:MouseEvent):void {
			if (_bitmap.bitmapData == null) {
				_bitmap.bitmapData = new BitmapData (3000, 3000);
				trace ('new');
			} else {
				_bitmap.bitmapData.dispose ();
				trace ('dispose');
			}
		}
		//}
	}
}
При запуске отладчик показывает 5 кб
При new 40,8 кб
При dispose 5,6 кб

Можно воспользоваться System.totalMemory вместо профайлера, результат будет тот же.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2011, 15:03
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 34  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Такой тест не проводил.
А вот если сделать так:
Код AS3:
package {
	import flash.display.Bitmap;
	import flash.display.Sprite;
 
	public class Test extends Sprite {
 
		[Embed(source = "image.png")] private var Img:Class;
		private var _image:Bitmap = new Img as Bitmap;
 
		public function Test() {
			addChild(_image);
		}
		public function clear():void {
			removeChild(_image);
			_image.bitmapData.dispose();
		}
	}
}
То после вызова clear() занимаемое картинкой количество памяти не поменятеся. + она так же будет болтаться в списке live objects
Однако, если сделать так:
Код AS3:
package {
	import flash.display.Bitmap;
	import flash.display.Sprite;
 
	public class Test extends Sprite {
 
		[Embed(source = "image.png")] private var Img:Class;
		private var _image:Bitmap = new Img as Bitmap;
 
		public function Test() {
			addChild(_image);
		}
		public function clear():void {
			removeChild(_image);
			_image.bitmapData.dispose();
                                  _image = null;
		}
	}
}
То все ок. Объект будет уничтожен сборщиком мусора, и память освободится.

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

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,883
Записей в блоге: 7
Цитата:
То после вызова clear() занимаемое картинкой количество памяти не поменятеся.
Меняется.
Код AS3:
package {
	/*    IMPORT             *///{ /
	import flash.display.*;
	import flash.events.*;
	import flash.system.System;
	//}
	public class TestDispose extends Sprite {
		/*    CONSTANT           *///{ /
		[Embed(source='wpapers.jpg')]private var Img:Class;
		private var _bitmap:Bitmap = null;
		//}
		/*  * CONSTRUCTOR *      *///{ /
		public function TestDispose () {
			stage.addEventListener (MouseEvent.CLICK, onClick)
		}
		//}
		/*    EVENT              *///{ /
		private function onClick (event:MouseEvent):void {
			if (_bitmap == null) {
				_bitmap = new Img as Bitmap;
				addChild (_bitmap);
				trace (System.totalMemory);
			} else {
				removeChild (_bitmap)
				_bitmap.bitmapData.dispose ();
				trace (System.totalMemory);
			}
		}
		//}
	}
}
Старт: 6'725'632
Первый клик: 18'034'688
Второй клик: 6'979'584
Хотя ссылку не обнулял.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 06.07.2011, 16:52
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 36  
Ответить с цитированием
goodguy
Banned
[+1 05.11.11]
[+1 09.08.11]

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Значит во флешдевелоп профайлер не обновляет данные о потребляемой картинкой памяти, пока объект полностью не удалится, или у меня что-то в нем не правльно настроено. Хз. Пару месяцев назад мне это просто выносило мозг, даже тему тут создавал. Но когда стал занулять ссылки, все быстренько стало подчищаться.

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

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
goodguy, не надо путать теплое с мягким. Bitmap != BitmapData. В вашем случае BitmapData уже уничтожена, а Bitmap жив, на него есть ссылки, ему можно приатачить новый BitmapData.
__________________
משיח לא בא
משיח גם לא מטלפן

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

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

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


 


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


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