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

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

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

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
По умолчанию Loader, Loader.unload(), GC и утечка памяти

помогите пожалуйста, никак не удаётся полностью удалить загруженный Loader'ом контент.
для примера грузим ролик с двумя кадрами, в первом кадре которого прописан trace. по клику всё по идее должно было бы удалиться, но всё-равно срабатывает трейс.

гугл сказал, что у некоторых такая бага была только во Flash IDE, а в браузере или в standalone player всё срабатывает. проверил, в браузере тоже не удаляется.

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

Код:
package {
	import flash.display.*;
	import flash.events.*;
	import flash.net.*;

	public class GCTest extends Sprite {
		
		public function GCTest() {
			stage.addEventListener(MouseEvent.CLICK, clickHandler);
		
			var contentLoader = new Loader();			
			contentLoader.load(new URLRequest('ef.swf'));
			addChild(contentLoader);
		}	    
	        
		private function clickHandler(e:MouseEvent):void {
			trace('click: '+e);
		
			if (e.target is Loader) {
				var contentLoader:Loader = Loader(e.target);
				contentLoader.unload();
				removeChild(contentLoader);
				contentLoader = null;
			}
			
			//GC enforcing
			try {
				new LocalConnection().connect('gcForce');
				new LocalConnection().connect('gcForce');
			} catch (err:*) {}
		}
	}
}
Вложения
Тип файла: rar GCTest.rar (13.0 Кб, 50 просмотров)

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

Регистрация: Sep 2002
Сообщений: 30,787
Я бы для начала все-таки не стал тестить автогенерируемый класс в CS3 в купе с нормальным классом.

Старый 22.02.2008, 00:52
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 3  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
ну даже если забыть про тест с библиотечным символом. никак не возьму в толк, почему здесь GC не собирает =(

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

Регистрация: Sep 2002
Сообщений: 30,787
GC во флеше довольно ленивый, пока не наберется некоторое количество забитой мусором памяти, он и не шевельнется.
Есть граница, если не ошибаюсь, кратная двум мегабайтам, тогда он хоть что-то начинает делать. В данном случае до двух мегабайт далеко.

Старый 22.02.2008, 01:06
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 5  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
В дебаг версии помимо кода в исходнике
Код:
			//GC enforcing
			try {
				new LocalConnection().connect('gcForce');
				new LocalConnection().connect('gcForce');
			} catch (err:*) {}
вызывал System.gc(). Один фиг. Так что дело не в сборщике мусора.

Старый 22.02.2008, 01:32
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 6  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
положил всякие фотографии в загружаемый ролик.. итого ef.swf - 7mb. безрезультатно..

Старый 22.02.2008, 01:37
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 7  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
А если удалить код из подгружаемого ролика, эти 7м все-равно останутся?

upd:
Просто заткнуть вторую флешку получилось, правда хитро очень )). Если успеть вызвать System.gc() два раза между трейсами, но не подряд )), то 2я таки сносится. Т.е. на мышиный клик подвесил gc(), и быстро кликаю 2 раза, если между кликами трейс не втисался, флешка затихает. Что это значит я не очень понимаю )). Наверное действительно какая-то лажа с автогенерируемыми классами.
Вложения
Тип файла: zip GCTest.zip (14.9 Кб, 55 просмотров)


Последний раз редактировалось badun; 22.02.2008 в 01:46.
Старый 22.02.2008, 02:10
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 8  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
badun, если из кадра подгружаемой флешки удалить trace(...), то судя по totalMemory оно таки удаляется ага. ура. спасибо за мысль

вот так вот. код в кадрах нельзя использоваться даже для теста. проверять только по totalMemoty

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

Регистрация: Sep 2002
Сообщений: 30,787
Я думаю, «лажа» в addFrameScript.

Старый 22.02.2008, 13:52
badun вне форума Посмотреть профиль Отправить личное сообщение для badun Найти все сообщения от badun
  № 10  
Ответить с цитированием
badun

Регистрация: Dec 2007
Сообщений: 269
после таких фокусов становятся понятными опасения Ивана Дембицкого ))

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

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

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


 


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


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