Как регулировать интенсивную загрузку процессора в Adobe Flex? - PullRequest
1 голос
/ 18 августа 2011

У меня есть метод, который подключается к HTTP-серверу и запрашивает через XMLRPC список структур данных, а затем для каждой структуры данных получает список атрибутов и значения этих атрибутов. Это реализовано с использованием вложенных циклов for each.

Проблема в том, что он загружает много данных одновременно и потребляет огромное количество ресурсов ЦП (более 100%), считывая ответы с сервера и анализируя XML.

Если бы я писал программу на C, я бы вставил usleep() в конце цикла, чтобы подождать, прежде чем пытаться загрузить больше данных и снизить нагрузку на процессор. Каким будет эквивалент во Flex?

Ответы [ 2 ]

3 голосов
/ 18 августа 2011

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

Вот некоторые решения, которые я использую для решения этих проблем:

  • Если возможно, не загружайте все с сервера сразу, а загружайте его с помощью нескольких вызовов (то есть считывайте свои данные, используя 10 страниц с 50 результатами вместо 500 сразу).

  • Убедитесь, что загружаемые данные не привязаны напрямую к некоторым элементам пользовательского интерфейса (изменения данных приведут к изменению пользовательского интерфейса, что потребляет больше ресурсов ЦП)

  • Попробуйте смоделировать нитевидную модель, используя объект Timer, и работайте над подмножеством ваших данных при каждом такте таймера.

Кроме того, возвращать результаты XML - не самый эффективный способ (использование RemoteObjects через BlazeDs более эффективно, так как вместо строк используются двоичные потоки).

0 голосов
/ 18 августа 2011

В некоторых случаях лучше придерживаться того, к чему у вас есть доступ, если вы не контролируете свой источник данных на стороне сервера. Другой альтернативой было бы написать оболочку getter / setter для вашего объекта XML. XML - первоклассный гражданин в AS3. Легко для чтения программ (e4x), но раздражает нас, разработчиков для написания и изменения. Если вы можете, получить страницу данных, которые когда-то получили, будет запускать другой запрос, в то время как пользователь может работать с данными со страниц, которые уже были загружены. Создайте иллюзию параллелизма, используя последовательные приемы.

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