Профилирование Flex - что [enterFrameEvent] делает?

Возможно, первым шагом будет преобразование X509* в BIO*. Функция для этого: int i2d_X509_bio(BIO *bp, X509 *x);. Согласно документам https://linux.die.net/man/3/d2i_x509 :

i2d_X509_bio () похож на i2d_X509 () за исключением того, что записывает кодировку структура x в BIO bp, и она возвращает 1 в случае успеха и 0 в случае неудачи.

blockquote>

Получив BIO*, содержащий закодированный сертификат, вы сможете просто поместить его в стек https://wiki.openssl.org/index.php/STACK_API :

/* add value */
#define sk_BIO_insert(st, val, i)       SKM_sk_insert(BIO, (st), (val), (i))

14
задан Herms 3 December 2008 в 20:45
поделиться

7 ответов

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

  1. Ручные ответы события <mycomponent enterFrame = ""> или, добавленные вручную через component.addEventListener (Событие. ENTER_FRAME, myfunc)

  2. callLater () вызовы, они происходят МНОГО в платформе и могут быть побочным продуктом того, чтобы спрыгивать от любого количества кроличьих нор, разработчики склонны использовать, они много для решения синхронизации связали проблемы, и иногда плохой код может заставить их продолжать называть каждый кадр. Например, существует ~120 случаев calllater () в последнем гибком проводе sdk сборка.

  3. наконец, я не могу гарантировать, что [enterframeEvent] обрабатывает просто межкадровые обратные вызовы определенного события, и не таймеры, мышь, и т.д. события, с тех пор enterframes имеют место во время основного цикла событий, можно видеть кумулятивный результат всех событий, стреляющих из основного пула события. Я не говорю, что это - то, что происходит, но я не могу сказать, что это НЕ то, что происходит также, я не знаю достаточно о внутренностях там, чтобы быть уверенным.

/ редактирование также, как указано ранее, [enterFrameEvent] должен технически стрелять внутренне в начале каждого кадра, но это ничего не должно делать, если события не были явно присоединены к этому для выполнения пользовательского кода.

5
ответ дан 1 December 2019 в 14:22
поделиться

Некоторые обновления: Мы ничего не делаем в приложении кроме прислушивания к событиям и использования привязки... означающей, никакого ChangeWatchers, никакое руководство, опрашивающее... просто ожидающий событий. Мы подключены к FMS все время, таким образом, существуют немного служебные для этого, но это минимально. Привязка не супер эффективна в Flex, и мы нашли, что не хорошо добавить [Связываемое] ключевое слово метаданных непосредственно к классам (в большом объеме с большим количеством классов). Мы не делаем большой части этого, но это - один способ сжать немного больше производительности из Вашего приложения. Если Вы используете [Связываемый (событие = "usersUpdated")] затем, Вы управляете привязкой, и это будет только стрелять когда Вы dispatchEvent (новое Событие ("usersUpdated")) из функции в классе, т.е., Ваш метод set для 'пользователей'.

Любой, кто использовал System.gc () в Flex или AIR, скажет Вам, что сборка "мусора" Flex является шуткой. Это - частично реализованная опция, и никто не доверяет ему. Существуют приемы для этого, также... называют его дважды, ожидают кадр, называют его снова. Это могло бы очистить Ваши старые объекты, но не скрещивает Ваши пальцы... Flex делает то, что он хочет.

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

myUser.location = новое Местоположение (); myUser.location.state = "CO"; myUser.location.city = "Денвер";

сделать...

var tempLoc: Местоположение = новое Местоположение (); tempLoc.state = "CO"; tempLoc.city = "Денвер"; myUser.location = tempLoc;

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

Привязка не уничтожит Ваше приложение, пока у Вас не будет большого количества из них в визуально большом приложении.... связывающем, и представляющем, кажется, самые медленные задания Flex.

Другая интересная вещь: создайте совершенно новое приложение Flex3 в Разработчике Flex и выполните его в браузере. Наши тесты показали, что ЦП остается между 8-10% на MacBookPro (когда приложение неактивно, и скрытое окно браузера). Наше приложение теперь достигает постоянно ~20% и в то время как оно пронзает выше для обработки изменений представления и т.п., оно всегда возвращается к уровню близко к 20%. Наше начальное беспокойство было то, что была утечка памяти или что-то убегающее, который возьмет ЦП очень высоко и оставит его колеблющийся приблизительно 40-50% (снова на MBP... все относительно этой машины). Мы вынули все ссылки на Degrafa и в то время как мы заметили хороший бит увеличения производительности, он не составлял все. Пустое приложение Flex было поучительно хотя - сам Flex пожиратели ресурсов 8-10% ЦП в любом случае, даже когда неактивный.

Еще одна находка... при использовании Помощника, быть осторожным, как Вы обрабатываете переключающиеся представления. Легко иметь активы в наличии и просто hide&disable их, когда они не используются, при помощи инжектора и привязки в MXML, но Flex не очень умен когда дело доходит до скрывающихся/запрещающих вещей. Лучше создавать представления на лету и уничтожать их, когда они сделаны. Даже при том, что начальное создание может занять больше времени и будет более длительное ожидание между представлениями, использовать некоторое волшебство дисплея (индикатор выполнения, вращающий диск, и т.д.), чтобы указать, что представление переключается, ожидайте creationComplete на представлении и затем исчезните в него.

Кроме того, держитесь подальше от ViewStack для визуально больших приложений. Управляйте своим собственным стеком.

До сих пор этот поток пробежался через основные проблемы производительности, характерные для любого языка, но Flex является совершенно особым маленьким мальчиком во многих отношениях ("особенный" не всегда рассматриваемый положительным моментом). Существуют неисчислимые ловушки, потому что это основывалось на очень визуальной платформе, все же это создается для УСТЬЕВ РЕКИ, поэтому в то время как Flash player может оптимизировать видео, анимации, и т.д., это не оптимизирует приложение Flex. Не ожидайте, что приложения Flex выполнят то же как приложения Flash. Существует также большая разница между AVM (Виртуальная машина ActionScript) для AS2 и AS3.

Это просто царапает поверхность проблем производительности и потенциальных усилений в приложениях Flex. Это - темное искусство, и легко видеть почему.

Код, ниндзя.

3
ответ дан 1 December 2019 в 14:22
поделиться

Я думаю, что Ваша проблема заключается в другом месте. Это происходит, потому что Flex создается сверху Flash и огней Flash что событие так же часто как framerate (так как 20-30 раз в секунду).

http://www.adobe.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary546.html

Править: Я не говорю, что Ваше решение состояло бы в том, чтобы понизить framerate. Это только работало бы, если бы замеченное событие u было проблемой. Я не убежден, что это на самом деле, что вызывает Ваше замедление. Это может быть вызов функции, которая вызывает проблему..., но то событие само не это. Это, как предполагается, стреляет много.

1
ответ дан 1 December 2019 в 14:22
поделиться

Обновление к этому сообщению, если кто-нибудь столкнется с ним в будущем ...

Несколько сотрудников в EffectiveUI У меня возникла именно эта проблема с их заявлением через пару месяцев, поэтому она была вновь рассмотрена. Было обнаружено, что при использовании Flash для создания визуальных ресурсов, ИСПОЛЬЗОВАНИЯ STATEFUL SKINS и экспорта их в SWC с помощью инструментария Flash / Flex для активов вы получаете безудержные Flash-ролики (предположительно что-то внутреннее по отношению к тому, как это реализовано, скажем, забыв поставить команды stop () в кадрах).

Очевидно, вы ничего не можете с этим поделать, кроме как войти и удалить все скины с состоянием. Хорошую статью можно найти здесь:

http://patrickhansen.com/blog/index.php/2009/03/05/flex-stateful-skins-vs-stateless?blog=3

И JSFL-скрипт, который вы можете использовать для преобразования скинов с сохранением состояния в скины без сохранения состояния:

http: //patrickhansen.com/blog/index.php/2009/04/08/stateful-to-stateless-jsfl-flash-command?blog=3

Hope это поможет кому-то! Это очень неприятная, таинственная ошибка, но вы можете обойти ее!

Приветствия

3
ответ дан 1 December 2019 в 14:22
поделиться

Justin, спасибо за ответ. Проблема не с межкадровым выполнением, а скорее с ним пытающийся сделать слишком много в каждом повторении.

К вашему сведению: По совпадению исходный плакат и я имеем дело с тем же приложением. Мы решили удалить все ресурсы Degrafa в пользу ProgrammaticSkins. Я сообщу о результатах здесь, когда мы завершим это.

0
ответ дан 1 December 2019 в 14:22
поделиться

Эта ссылка объясняет каждую из [функции ] описан в профилировщике производительности:

http://livedocs.adobe.com/flex/gumbo/html/WS6f97d7caa66ef6eb1e63e3d11b6c4d0d21-7edf.html

1
ответ дан 1 December 2019 в 14:22
поделиться
1
ответ дан 1 December 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: