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

Вернуться   Форум Flasher.ru > Блоги

Аватар для dimarik
.

Memory allocation на Vector.<IInterface>

Запись от dimarik размещена 07.05.2015 в 21:50
Всем привет!
Недавно обнаружил интересное поведение при создании нового вектора с интерфейсом.
Суть в том, что создание экземпляра Vector, параметризуемым некоторым типом интерфейса вызывает накладные расходы в виде создания дополнительных экземпляров Object и String. Но ладно бы это происходило только один раз, в некоторых условиях такие дополнительные "плюшки" сыпятся постоянно. А именно...
Если в GCRoot не зарегистрирован хотя бы один экземпляр Vector.<IInterface>, ...
Старый
 
Размещено в Без категории
Комментарии 1 dimarik вне форума
Аватар для dimarik
.

[Starling] Тормози меня плавно!

Запись от dimarik размещена 28.10.2014 в 22:34
После выхода из бакграунда с потерей контекста на андроид-устройствах встретился с довольно неприятной Starling-фичей. Она называется QuadBatch#registerPrograms(). Эта штука начинает заново компилить в AGAL то, что она уже разок скомпилила. На выхлопе мы получаем офигевший GC от мусора, производимым AGALAssembler, в основном, от операций над String, полем которым является листинг шейдеров, представленных в этой самой QuadBatch#registerPrograms(), а также сам процесс компила в ByteArray.
...
Старый
 
Размещено в Без категории
Комментарии 7 dimarik вне форума
Аватар для dimarik
.

[Starling идиотизмы] Об интерактивных событиях

Запись от dimarik размещена 02.10.2014 в 22:21
Сегодня на работе был забавный случай. Коллеги, занимающиеся параллельным проектом, в основе которого лежит библиотечка Starling версии 1.5.1 или что там сейчас новее из ихнего стабильного, испытали культурный шок на старлинговских событиях Touch. Оказывается, нет никакой возможности отследить текущий объект, над которым проходит мышка с зажатой ЛКМ. События всегда генерируются с таргетом, над которым была зажата клавиша, даже если курсор покинул этот таргет и "гуляет" уже над другим. ...
Старый
 
Размещено в Без категории
Комментарии 2 dimarik вне форума
Аватар для dimarik
.

О типах исключений.

Запись от dimarik размещена 23.04.2014 в 00:26
Ну как обычно, просто, чтобы не забыть куда постил.

Цитата:
Сообщение от grafillo! Посмотреть сообщение
а метод обработки ошибок try - catch в данном случае лучше не использовать?
Загрузка через Loader#load() может создать как синхронную ошибку, так и асинхронную.
Синхронные исключения... Ах, давай с начала и по порядку!
Начнем, пожалуй.

Привет! Нужно сразу же научиться отличать ошибки от исключений (exceptions).
Ошибки бывают у всех, даже если ты (вдруг, уже) не женат.
Скорее ...
Старый
 
Размещено в Без категории
Комментарии 8 dimarik вне форума
Аватар для dimarik
.

Немного о Vector и ByteArray

Запись от dimarik размещена 28.03.2014 в 22:48
Обновил(-а) dimarik 01.04.2014 в 12:35
Как всегда, буду краток.

Код AS3:
const someVector:Vector.<SomeT> = new <SomeT>[];
... добавляем объекты SomeT в someVector
someVector.length = 0; // ! освобождения памяти не происходит !
// Память может только расти. Освободить память можно лишь 
someVector = null;
Текущая версия Adobe Scout помещает эту память в категорию Uncategorized.

ByteArray освобождает память только по clear(), установка его length = 0 не освобождает ...
Старый
 
Размещено в Без категории
Комментарии 44 dimarik вне форума
Аватар для dimarik
.

Прошу проголосовать на bugbase.adobe.com

Запись от dimarik размещена 15.11.2013 в 23:49
По мотивам моей записи в блоге, а там я таки засвидетельствовал серьезный недостаток текущего AIR SDK в базу данных Adobe bugbase.
События вроде как вяло развиваются.

Если есть желание, можете потестить баг (я обещаю через личку помочь с установкой и настройкой проекта) и/или проголосуйте за него. Ее уже приняли к рассмотрению.

Откланиваюсь.
Старый
 
Размещено в Без категории
Комментарии 20 dimarik вне форума
Аватар для dimarik
.

Anonymous function vs. Adobe AIR ADT

Запись от dimarik размещена 11.11.2013 в 15:00
Обновил(-а) dimarik 11.11.2013 в 22:57
Такая печаль. При использовании анонимок и после упаковки в ipa первый созданный экземпляр никогда не удаляется из памяти. А значит, не удаляются все объекты, на которые у него есть ссылки.

На устройстве баг проявляется в таком виде:

Код AS3:
new BindingWarsObject(); // <-- остается в памяти
new BindingWarsObject(); // удаляется
new BindingWarsObject(); // удаляется
System.gc();
 
/**
  * Constructor
  */
 public function
...
Старый
 
Размещено в Без категории
Комментарии 12 dimarik вне форума
Аватар для dimarik
.

Kung-fu. Как правильно терять ссылку на master string.

Запись от dimarik размещена 05.11.2013 в 23:11
Обновил(-а) dimarik 06.11.2013 в 01:16
В очередной раз пытаясь умерить аппетиты своего приложения для мобилки, нашел забавным поведение эмулятора (adl). Вполне возможно, это распространяется на остальные flash-похожие рантаймы.

Будем "выгружать" т.н. master string. Сразу скажу, что выгрузить его у меня не получилось. А у jacksondunstan можно почитать о технике устранения неприятеля. Я не думаю, что они выгрузили его из памяти. Скорее просто потеряли ссылку на него.
Но вот сама техника подкачала. Ссылка ...
Старый
 
Размещено в Без категории
Комментарии 10 dimarik вне форума
Аватар для dimarik
.

Необъяснимые memory allocation на строгих проверках.

Запись от dimarik размещена 05.08.2013 в 12:32
Обновил(-а) dimarik 07.08.2013 в 13:04
Недавно обнаружил забавную особенность. Если использовать строгую проверку (stricte quals "===" или "!==") при сравнении двух Number, и если один из операндов не является целым числом, то происходит выделение памяти (memory allocation), примерно 8 байтов на одну проверку. Строгое сравнение остальных типов данных не вызывает лишнее выделение памяти.

GC лишнюю память, конечно, очищает, но на выделение и очистку уходит драгоценное время.

В байткоде ...
Старый
 
Размещено в Без категории
Комментарии 4 dimarik вне форума
Аватар для dimarik
.

GC тоже иногда расслабляется

Запись от dimarik размещена 11.06.2013 в 01:03
Обновил(-а) dimarik 01.08.2013 в 18:43
Создаем текстуру для Stage3D. Добавляем ее как ссылку в некий TestObject extends Object. Повторяем создание новой текстуры и объекта невообразимое количество раз. Ссылку на каждый новый TestObject не запоминаем из принципа. GC отлично срабатывает, и мы не получаем уведомления от рантайма о переполнении GPU memory. Теперь перепишем листинг класса TestObject так, чтобы он создавал в себе ссылку на метод, созданный в его контексте (метод объекта, анонимка). Запускаем.

AIR 3.5, 3.7 ...
Старый
 
Размещено в Без категории
Комментарии 4 dimarik вне форума
Аватар для dimarik
.

Фокус: удаленный из DL объект не теряет фокус.

Запись от dimarik размещена 16.01.2013 в 18:15
Обновил(-а) dimarik 16.01.2013 в 22:10
Может быть старая багофича.

Суть: ставим фокус (stage.focus = child) на дитё, внука или правнука и т.д. Удаляем родителя из дисплейлиста. Фокус остается прежним stage.focus == child // true.

Как использовать: кликаем на красный квадратик и жмем кнопочку "пробел". В текстовом поле появится имя удаленного из дисплейлиста дитя.

Как ожидается: удаление объекта, на котором есть фокус приводит к обнулению stage.focus.

Комментарий: ...
Старый
 
Размещено в Без категории
Комментарии 9 dimarik вне форума
Аватар для dimarik
.
Рейтинг: 4.00. Голосов: 3.

Загружаем классы в текущий SecurityDomain.

Запись от dimarik размещена 28.02.2011 в 22:56
Обновил(-а) dimarik 25.10.2011 в 22:22
Этот код позволяет универсально решить проблему загрузки классов внешних модулей и библиотек в текущий SecurityDomain приложения. Даже при отсутствии разрешений распространителя (crossdomain.xml) и создателя (Security.allowDomain()). Не требуется проверка на SecurityError или обработка SecurityErrorEvent.

Немного о проблеме — раз, два, три (проблема с взаимодействием local-remote)



Код AS3:
/*
 
  The MIT License, 
 
  Copyright (c) 2011.
...
Старый
 
Размещено в Без категории
Комментарии 6 dimarik вне форума
Аватар для dimarik
.

Timer против GC.

Запись от dimarik размещена 21.02.2011 в 23:41
Обновил(-а) dimarik 13.03.2011 в 23:29
Все просто. Пока тикает экземпляр Timer, он не может быть удален сборщиком мусора (Garbage Collector).

Теорему доказывал на FP 10.0

Все было известно ранее.
Старый
 
Размещено в Без категории
Комментарии 16 dimarik вне форума
Аватар для dimarik
.

Native dispatching

Запись от dimarik размещена 27.06.2010 в 23:32
Обновил(-а) dimarik 27.06.2010 в 23:36
Чтобы не забыть.

Нам нужно бабблить событие.

Кастомный вызов dispatchEvent отличается от системного бабблинга. Давайте вызовем распространение события системным способом. Предлагаю из серии InteractiveObject#tabIndex.

Будет, вероятно, шустрее. [Проверить тестами]
Старый
 
Размещено в Без категории
Комментарии 4 dimarik вне форума
Аватар для dimarik
.

Loader vs FP security. Мат в два хода.

Запись от dimarik размещена 24.06.2010 в 12:38
Обновил(-а) dimarik 05.04.2011 в 23:35
Сделать хотел утюг, -
Слон получился вдруг


Из популярной песенки.

Немного соглашения о терминах.

Host application - загрузчик, недоступен для модифицирования.
Loadee - загружаемое приложение, которое полностью контролируется разработчиком, т.е. нами.
Весь представленный ниже код находится в loadee.

Пусть вас не смущает желтоватое название статьи - описанный ниже прием решается ровно в два хода.

Предыстория. ...
Старый
 
Размещено в Без категории
Комментарии 13 dimarik вне форума
Аватар для dimarik
.
Рейтинг: 4.82. Голосов: 11.

Loader vs FP security.

Запись от dimarik размещена 23.06.2010 в 14:00
Обновил(-а) dimarik 12.10.2012 в 00:29
Если нельзя, но очень хочется, то можно. Крылатая фраза.

Иногда возникает желание загрузить в приложение изображение с чужого сайта. Казалось бы, нет проблем. new Loader() и вперед!
И ведь загрузит. Однако при попытке обратиться к свойству content или скопировать пиксели методом BitmapData#draw() для реализации, например, DragManager, нас может ожидать разочарование. На чужом сайте просто забыли создать для вас файл политик crossdomain.xml или таковой существует, но отсутствует ...
Старый
 
Размещено в Без категории
Комментарии 22 dimarik вне форума
Аватар для dimarik
.

Loader можно использовать повторно

Запись от dimarik размещена 22.06.2010 в 01:16
Обновил(-а) dimarik 22.06.2010 в 01:39
А все ли знают, что единожды инстанцированный экземпляр класса Loader можно использовать повторно сколь угодно раз для скачивания очередной картинки или флеш-ролика? Теперь знаете. Его можно использовать для загрузки сколь угодно многих SWF. И я не оговорился. Те картинки, что в форматах JPG, PNG, GIF преобразуются нашим умным флеш-плеером именно в формат SWF. Но это отдельная история о 85-ом теге и я, может быть, немного расскажу о ней. В другой раз.

А сейчас нас интересует повторное ...
Старый
 
Размещено в Без категории
Комментарии 38 dimarik вне форума
Аватар для dimarik
.

Скорость чтения динамического свойства объекта.

Запись от dimarik размещена 07.06.2010 в 17:57
Чтобы не забыть.

Код AS3:
var testObject:Object = new Object();
testObject.property = "property_value";
const prop:String = "property";
Вот результат в порядке возрастания времени доступа на 40 млн итерациях, в мсек:

Код AS3:
"property" in testObject; // 7222
 
prop in testObject; // 7270
 
testObject.property; // 7585
 
testObject[prop]; // 8077
 
testObject["property"];
...
Старый
 
Размещено в Без категории
Комментарии 5 dimarik вне форума
Аватар для dimarik
.
Рейтинг: 4.50. Голосов: 2.

GIF to MovieClip 2

Запись от dimarik размещена 24.04.2010 в 01:48
Обновил(-а) dimarik 21.01.2013 в 22:30
Собственно, демка. Если нужно кому - сделаю исходный код
GIFMovieClipTest.swf   (23.1 Кб)
.

Можно ввести http://www.flasher.ru/forum/images/smilies/smile.gif
Старый
 
Размещено в Без категории
Комментарии 31 dimarik вне форума
Аватар для dimarik
.

GIF to MovieClip

Запись от dimarik размещена 24.04.2010 в 01:44
Обновил(-а) dimarik 27.02.2011 в 13:04
Немного озадачивался темой GIF формата. С темой p=95 на bytearray.org сильно знаком. Именно эта штука вдохновила меня сделать совершенно по-другому.

Все ниже посвящено изображению в GIF-формате.

Сначала я затеял глубокую оптимизацию вышеупомянутого GIFPlayer'а. Но результат, если и улучшился, то не более чем на 20%. Картинка в 1 млн. пикселей (1 000 x 1 000 px) открывалась чуть меньше секунды. Такой результат меня не радовал. Ведь было с чем сравнивать. Если эту же ...
Старый
 
Размещено в Без категории
Комментарии 3 dimarik вне форума

 


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


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