Показать сообщение отдельно
Старый 01.05.2011, 11:14
mooncar вне форума Посмотреть профиль Отправить личное сообщение для mooncar Найти все сообщения от mooncar
  № 3  
Ответить с цитированием
mooncar
Модрон-ветеринар
 
Аватар для mooncar

администратор
Регистрация: May 2009
Адрес: г.Казань
Сообщений: 7,357
Отправить сообщение для mooncar с помощью ICQ Отправить сообщение для mooncar с помощью Skype™
Цитата:
Сообщение от dark256 Посмотреть сообщение
Память не течет, глюков не возникает, все как часы. Собственно отчего ты уже неск. дней вылавливаешь такие тонкие нюансы?
Оттого, dark, что наборы картиночек на сотни мегабайт. В нужный момент не очистил память или попытался приаттачить битмапу к несуществующиму ролику, или еще что - крах плеера.
В принципе, сейчас всё работает сносно, в паре разделов на сцену даже выводится около 25 мБ графики с частотой 25 fps (то есть около полугига лосслесс графики в секунду - картинки 3500 на 1900) , но косячки еще есть и связаны они как раз с событийной схемой. То есть без dispose() никак. А вот работает dispose иногда странно - очистка вроде проходит (графика на сцене пропала), но по дистпетчеру Windows видно, что виртуальная и рабочая память не уменьшилась.
И только после перехода к новой сюжетной сцене занимаемый объем сразу падает.

Добавлено через 9 минут
Цитата:
Сообщение от dark256 Посмотреть сообщение
Память не течет, глюков не возникает, все как часы.
Если у тебя количество BitmapData в мегабайтах на весь ролик ограниченное, и нет явных косяков, то и не будет течь.
Утечка, например, возникает, если как у меня при смене отрисовываемого кадра не сделать dispose() предыдущей приаттаченной битмапе на данном уровне. За 5 секунд - 1,5 гига в ОЗУ и вылет.

Примерно такая функция работает на событие EnterFrame:
Код AS1/AS2:
function seqShowFrame(seq:String, frame:Number)
{
	mc.pic.removeMovieClip();
	mc.bmp.dispose();
 
	linknum = ... frame ...     
 
	var linkageId:String = seqData[seq]['prefix'] + linknum + seqData[seq]['suffix'];
	...
	if (frame <= seqData[seq][1]['last']) lib = seqData[seq][1]['lib'];
	if (frame >= seqData[seq][2]['first'] && frame <= seqData[seq][2]['last']) lib = seqData[seq][2]['lib'];
	if (frame >= seqData[seq][3]['first'] && frame <= seqData[seq][3]['last']) lib = seqData[seq][3]['lib'];	
	if (frame >= seqData[seq][4]['first'] && frame <= seqData[seq][4]['last']) lib = seqData[seq][4]['lib'];
 
	mc.bmp = lib.getBitmap(linkageId);
	..
	var pic:MovieClip = mc.createEmptyMovieClip('pic', 0);
	pic.attachBitmap(mc.bmp, 0);	
}
Поскольку на каждую сцену 4 бблиотеки (не удалось собрать в одну), поэтому и битмапа так сложно извлекается. Но я переделаю
__________________
Идите первым!


Последний раз редактировалось mooncar; 01.05.2011 в 11:33.