Высокая загрузка ЦП для приложения Flex - PullRequest
0 голосов
/ 11 марта 2010

У меня есть приложение Flex. Удивительно, но при работе на моем ноутбуке он загружается примерно на 50% (колеблется между 40 и 60%). Это 4-летняя модель Dell - процессор Intel T1350 с частотой 1,86 ГГц. Странно то, что приложение поддерживает мой процессор на 50%, хотя ничего не делает. Это статичный, довольно сложный экран Flex. У меня нет запущенных эффектов, нет связи с сервером, нет анимации. Конечно, у него есть эффекты и подобное динамическое поведение, но в этом тесте я не касаюсь его. Я просто загружаю его, и он остается статичным, но процессор все еще на 50%. Конечно, я профилировал приложение, но оно не дает мне много полезной информации. Я даже профилировал приложение, когда браузер скрыт другим окном (процессор все еще загружен), и большая часть времени была потрачена на эти три элемента: Timer.tick - 54,5%, [enterFrameEvent] - 21,5% и [пожинать] - 12,5%. Все это Self Times, то есть не в других методах, используемых в этих трех.

Любые идеи, которые могут привести к такой высокой загрузке процессора, приветствуются. ... или подходы к определению первопричины.

Дополнительная информация: Когда то же приложение запускается на моей машине для разработки (процессор Intel Core 2 Quad Q6600 @ 2.4 GH), разумеется, загрузка падает до 16%, потому что процессор в несколько раз быстрее, но все же это слишком много для статического экрана и этого быстрого процессора. Кроме того, если я запускаю его с IE (все числа выше для FF), то загрузка ЦП приближается к 0%. Я предполагаю, что версия флеш-плеера ActiveX удаляет нагрузку на ЦП, делегируя работу на GPU (мою видеокарту), но это относится только к сценарию IE + хорошая видеокарта, что я не могу предположить для большинства моих пользователей. .

Я также заметил, что повышение FPS до 60 (приведенные выше числа соответствуют стандартным 24 кадрам в секунду), на самом деле это не меняет нагрузку на процессор. Снижение FPS до 12 снижает нагрузку на процессор, но не пропорционально, и это не может быть способом решения этой проблемы.

Я склонен думать, что проблема связана с иерархией пользовательского интерфейса, которая у меня есть. Он может быть слишком сложным и / или вложенным для флеш-плеера, но тогда почему процессорное время должно занимать, когда экран полностью статичен.

Требуется помощь.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 11 марта 2010

Я просмотрел вашу проблему и увидел, что вы упомянули класс Timer. Если вы используете таймер все время, пока приложение работает, это круто.

Однако, есть очень хороший шанс, что вы не удалили EventListener на таймере и (как на всякий случай) не установили timer = null после того, как вы закончили его использовать. В зависимости от того, как вы используете ваши объекты таймера, вы также можете многократно создавать циклы и создавать новые экземпляры таймера. В сочетании с отсутствием вызова removeEventListener огромное количество экземпляров таймера может никогда не получить мусор.

Просто потенциальная проблема, которую я заметил. Удачи.

0 голосов
/ 11 марта 2010

Несколько мыслей.

  1. По возможности избегайте вложений, глубокая иерархия пользовательского интерфейса приведет к замедлению рендеринга
  2. Добавляйте на сцену только элементы, которые нужно нарисовать, элементы вне сцены также замедляют рендеринг.
  3. Если у вас много виджетов, вам может не понадобиться отображать / инициализировать их все.

Но я не понимаю, почему (1) или (3) выше относятся к FPS. Что ты рисуешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...