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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 26.11.2010, 22:30
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 1  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
По умолчанию управление памятью с Flash Develop profiler

Собственно, всех кого интересует каким образом работает профайлер во FlashDevelop рассказываю:

В тот момент когда вы компилируете debug версию вашего приложения, FlashDevelop загружает вместе с вашим приложением флешку, которую он подбирает с
C:\User\%UserName%\AppData\Local\FlashDevelop\Data\As3Context\ Profiler4.swf

Эта флешка устанавливает сокет соединение, через через host:localhost, port:1978. Через которое передает список 'живых объектов'.

Формируется этот список с помощью класса Dictionary. Как вам наверное уже известно класс Dictionary можно инициировать таким образом, чтобы его свойства были слабо связанными ссылками на объекты, которые вы используете для определения этих свойств.

Код AS3:
// создаем объект и определяем жесткую ссылку.
var someDisplayObject:DisplayObject = new Sprite () as DisplayObject ();
 
// создаем словарь
var dictionary:Dictionary = new Dictionary (true);
 
// определяем слабую ссылку на объект
dicionary[someDisplayObject] = ... (все что угодно)
 
// удаляем жесткую ссылку
someDisplayObject = null;
 
// при обходе все равно покажет спрайт, потому что GC не удаляет объекты, когда памяти еще достаточно.
for (var item:DisplayObject in dictionary)
{
     trace (item) // output [Sprite] 
}
 
//и теперь после System.gc () он наконец сможет показать, что объект удалился.
Cсылки на объекты он собирает с помощью пакета flash.sampler. Буквально так:
Запускает таймер и в хандлере таймера собирает образы, которые собираются, после того как вызвать метод flash.sampler.startSampling ();

Дальше в функции обработчике
вытаскивает объект с образами (flash.samler.getSamples())
Если образ это объект типа NewObjectSample, то вытаскивает из него ссылку на объект (судя по всему жесткую), через недокументированное свойство object и запихивает его в свой dictionary.
После этого удаляет все образы и снова стартует сборку образов.

Чтобы в образы не записывалось много внутренних образов самого профайлера, profiler приостанавливает сборку внутри той или иной функции (flash.sampler.pauseSampling) и запускает ее снова, когда выходит из нее (flash.sampler.startSampling)

Теперь выводы:

Самый главный вывод, профилировать с помощью такого профайлера нельзя или можно но с очень большим трудом. И вот почему:

1. Во первых, как бы не старался профайлер при выходе из функции гребаный флеш плеер все равно плодит никем не контролируемые объекты типа Class, Function, Namespace и.т.п Все эти объекты все равно попадают в коллекцию образов профайлера, а это в свою очередь ведет к тому, что мы получаем никому не нужные списки объектов, о которых не имеем не малейшего понятия. Профайлер конечно здесь не виноват,
потому что он делает все, что в его силах. Из Объекта Sample он достает массив stacks из которого можно определить, что послужило созданию объекта, но тем не менее, все эти объекты скорее всего убьются сборщиком мусора и потому нам совершенно не нужны. Со временем их становится так много, что за деревьями не видно леса и мы теряем из виду нужные нам объекты.

2. Совершенно непонятно почему плеер пользуется объектами actionscript когда у него есть возможность пользоваться своими собственными низкоуровневыми объектами. Я еще могу понять зачем он создает объекты LoaderInfo и ApplicationDomain при инициализации первого спрайта. Но зачем он создает функции и объекты между вызовами функций, совершенно непонятно.

3. В третьих чтобы точно выяснить, будет ли ваш будет удален нужно явно вызывать сборку мусора.

4. Обслуживание работы профайлера стоит дорого. Профайлер плодит TimerEvent и еще много всякого мусора, работает с интервалом 50 миллисекунд, при каждой иттерации обходит и создает на лету новые объекты.

Так что выводы неутешительные.

Доподлинно известно, что
плеер помечает отработанные объекты ([mark]), прежде чем когда либо их удалить ([sweep]).

Логично было бы в том же пaкете flash.sampler иметь функцию, в которую можно передать слабую ссылку на объект и выяснить помечен ли он или нет для сборки мусора. В крайнем случае, хотя это и убогий метод, можно было бы сразу же помечать объект, на который больше нет явных ссылок и добавлять метод [mark] в stacks образов, но с сожалению, этих невидимых команд там нет. Я в отчаянии.

Adobe настолько сильно увлеклись своим flex, что забыли о самом главном что у них есть pure actionscript Вместо того, чтобы делять на хрен никому не нужные компоненты flex. С куда большей пользой можно было бы предоставить адекватный инструментарий для контроля за памятью. Чуть ли не самым важным элементом в любом приложении.

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

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

Старый 27.11.2010, 01:14
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 3  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
Честно, уже надоело здесь что - либо писать. Я вам ничего не должен так, между прочим. У вас свое понимание процесса управления у меня свое. Формально наблюдение за памятью можно считать частью процесса управления. По существу есть что сказать ?!

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

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

Старый 27.11.2010, 14:05
Psycho Tiger вне форума Посмотреть профиль Отправить личное сообщение для Psycho Tiger Найти все сообщения от Psycho Tiger
  № 5  
Ответить с цитированием
Psycho Tiger
 
Аватар для Psycho Tiger

блогер
Регистрация: Jun 2005
Адрес: Toronto
Сообщений: 6,599
Записей в блоге: 17
Вы рассказали статью, а Ваш читатель заинтересовался главным выводом в заголовке. У Вас странная реакция.

За статью спасибо, почерпнул что-то новое.

Старый 27.11.2010, 19:45
inozemcev вне форума Посмотреть профиль Отправить личное сообщение для inozemcev Найти все сообщения от inozemcev
  № 6  
Ответить с цитированием
inozemcev
[+ 1.0 08.10.14]
 
Аватар для inozemcev

блогер
Регистрация: Mar 2010
Адрес: x = stage.stageWidth/2 y= stage.stageHeight/2
Сообщений: 293
Записей в блоге: 2
Извините, просто в тот момент когда я ожидал поддержки, ко мне придрались по незначительному на мой взгляд поводу - это и взбесило. Но в прочем это не важно потому, что я таки докопался до истины.
Вообщем я недооценил силу flash.sampler.* Остальное напишу в блоге.

Старый 27.11.2010, 20:44
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 7  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Цитата:
ко мне придрались по незначительному на мой взгляд поводу
dimarik теперь модератор, так что готовьтесь. Плюсом он еще и ценитель Русского языка.
То ли еще будет...


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

Теги
profiler

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

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


 


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


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