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

Вернуться   Форум Flasher.ru > Flash > Общие вопросы о Flash (не затрагивающие ActionScript)

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

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
По умолчанию Flash and memory leaks

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

Ужасно много времени занимает эта проблема. А сумашедший garbage collector поднимает сложность анализа крупного прилодения до дьявольских высот.

Для упрощения взаимопонимания. Выключил 90% аппликухи, осталось несколько классов. ASProfiler показывает, что нет никаких периодических вызовов. Однако мемори ликс - есть.

Давайте делиться опытом!

Старый 08.06.2007, 14:29
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 2  
Ответить с цитированием
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Ну что же. Три дня мучений и пару штук я нашел.
Про netConnection наверное все знают? Ну кто не знает:
Код:
var a:NetConnection = ...;
a.connect(...);
a.call('...', a); a.onResult = function(infoObj:Object) {};
Вот эта конструкция при большом количестве вызовов a.call('...', a); здорово жрет память и проц. Решение - просто скидывать NetConnection и генерить новый.

Но это простой баг, я его давно нашел. А самый крутой - вот:
Вот эта конструкция не дает утечек памяти
Код:
setInterval(function() { var c = 0; if(c) { var a = 1; } else { z = 2; } }, 30);
А вот эта - дает!
Код:
setInterval(function() { if(0) { var a = 1; } else { z = 2; } }, 30);
И причем дает дохрена.
Аналогичным образом, эта конструкция тоже течет
Код:
_root.ff = function() { };
setInterval(function() { _root.ff(); }, 30);
ну и эта тоже... понятно.
Код:
setInterval(function() { function() { }, 30);
Чтобы победить утечки в этих конструкциях, нужно, чтобы в периодически вызываемой функции обязательно происходили хоть какие-нибудь вычисления. Хотя бы и после return (!!!). Например:
Код:
mc.onEnterFrame = function(){return;};
будет течь, а
Код:
mc.onEnterFrame = function(){return; _root.aabbcc = 1; };
не будет! (вот пипец)

Дальше - не менее круто. Периодические функции, вызываемые через Delegate.create будут течь в любом случае!! Привет всем любителям делегирования от компании macromedia.

Также обнаружил что обращение к MovClip.filters внутри периодически вызываемой функции тоже течет.

Мои муки с memory leaks в самом разгаре, вполне возможно что список дополнится -)


Последний раз редактировалось MyXus; 08.06.2007 в 14:32.
Старый 08.06.2007, 14:39
†‡Paladin‡† вне форума Посмотреть профиль Отправить личное сообщение для †‡Paladin‡† Найти все сообщения от †‡Paladin‡†
  № 3  
Ответить с цитированием
†‡Paladin‡†

Регистрация: Nov 2005
Сообщений: 1,058
Круто. Буду знать.

Старый 08.06.2007, 16:54
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 4  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Действительно, круто! Без шуток. Но до конца я не понимаю, в связи с чем такое море проблем возникло. Ты решил провести своего рода "глобальный тест" на утечки что ли?
Или это все было в одном приложении, которое вызывало memory leaks?

Старый 08.06.2007, 17:13
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 5  
Ответить с цитированием
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Я пишу desktop application, если не убирать такого рода утечки, аппликуха отжирает за ночь 300 метров и виснет.

кстати, я нашел пример когда Delegate.create не течет.. но пока мне могу разобраться почему -) Слишком большая аппликуха.

UPD: 2alexcon314: Кстати, я знаю ты пользуешся цинком? Я кое что тестировал на цинке, и ни один из сэмплов не тек -)) Умный цинк ловит утечки флеш плеера! Но я, к сож, не могу пользоваться цинком.
__________________
#define true false //счастливой отладки, друзья


Последний раз редактировалось MyXus; 08.06.2007 в 17:16.
Старый 08.06.2007, 20:02
alexcon314 вне форума Посмотреть профиль Отправить личное сообщение для alexcon314 Найти все сообщения от alexcon314
  № 6  
Ответить с цитированием
alexcon314
listener

модератор форума
Регистрация: Jun 2006
Сообщений: 3,260
Записей в блоге: 28
Отправить сообщение для alexcon314 с помощью ICQ
Мм-дааа... тут действительно задумаешься. Я не замечал в цинке таких проколов, но теперь буду внимательнее. У меня после беглого теста возникло предположение, что lekas начинается если идут переходы по кадрам. В одном кадре с этими примерами ничего необыкновенного не происходит. И в цинке - leak происходит непонятными рывками и проц на грани падения. Когда в одном кадре - все спокойно.
не пытал только Net.connection. И не оставлял на ночь. У меня сразу все начинается, если начинается вообще.
А ты как тестишь?


Последний раз редактировалось alexcon314; 08.06.2007 в 20:06.
Старый 09.06.2007, 17:03
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 7  
Ответить с цитированием
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Короче.
1. Последние исследования показали что флеш плеер течет, и будет течь неостановимо (АС2! АС3 почти не течет). Так что все, кто занимается этой проблемой - забейте.
2. Zinc - подбирает память за ФП, так что Zinc - решение для АС2 юзеров. Для меня - проблема в том что Zinc адски тормозит в транспарент моде.
3. Для писателей АС2-аппликух для работы в браузере - убойтесь ФП. И переходите на АС3.
__________________
#define true false //счастливой отладки, друзья


Последний раз редактировалось iNils; 09.06.2007 в 17:55.
Старый 13.06.2007, 18:54
MyXus вне форума Посмотреть профиль Отправить личное сообщение для MyXus Посетить домашнюю страницу MyXus Найти все сообщения от MyXus
  № 8  
Ответить с цитированием
MyXus
 
Аватар для MyXus

Регистрация: Mar 2001
Адрес: msk
Сообщений: 1,416
Дорогие друзья. Хочу принести извинения за некорректные сведения.
Еще несколько (сотен) тестов совершенно изменили картину. Не вдаваясь в подробности: новые результаты:
1. Единственный проверенный источник утечек, из тех, что я упоминал - net_connection_instance.onResult(..);
2. Флюктуации с памятью при работе со всеми остальными приведенными примерами исправляются garbage collector'ом ФП. Через некоторое время, при суммарных утечках не менее ~2МБ (вот и причина моих преждевременных выводов, - я не дожидался этого момента).
3. MDM Zinc не стал течь на каких тестах, из тех что я ему давал. Впрочем, я нисколько не уверен что и он не имеет своих дыр.

PS. Господа модеры. Возможно, во избежание смущения, умов этот тред надо удалить?
__________________
#define true false //счастливой отладки, друзья

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

Регистрация: Sep 2002
Сообщений: 30,787
Пусть будет

Старый 10.12.2008, 15:17
kia007 вне форума Посмотреть профиль Отправить личное сообщение для kia007 Найти все сообщения от kia007
  № 10  
Ответить с цитированием
kia007

Регистрация: Oct 2007
Сообщений: 78
Код AS3:
var str:String = "";
try
{
	for (var i:int = 0; i < list.length; i++)
	{
		str += "<font color='#521017'>[" + list[i].Level + "]</span> <a href='event:" + list[i].Username + "'>" + 
						list[i].UsernameHtml(true) +"</a>" + " (<b><a href='" + m_hostName + 
						list[i].PlayerLink + "' class='style2' target='_blank'>i</a></b>)" + "<br>";
	}
}
catch(_e:Error)
{
}
m_comp.TextfieldUsersList.htmlText = str;
m_comp.ScrollBar2.update();
m_comp.ScrollBar2.scrollPosition = m_chat_s.ScrollBar2.scrollPosition;
 
str = null;
Если оставить try catch, то утечка
если закомментировать try catch то нет утечки.

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

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

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


 


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


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