Сколько последовательных звонков слишком много? - PullRequest
0 голосов
/ 26 сентября 2011

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

Все работало нормально, пока не было нескольких сотен записей (700), если быть точным. Это заставит флэш-плеер пыхтеть? Должен ли я перейти в систему с очередями? Сколько записей это слишком много?

Спасибо за любые полезные советы.

Вот обновленный метод, который отправляет последовательные вызовы:

var counter:int= 0;
        for each ( var item:ObjectVo in itemColl)
        {
            counter = counter + 1;
            var evt:DataValidationEvent = new DataValidationEvent();
            evt.myItem = item;
            evt.eventType = DataValidationEvent.EVENT_TYPE_PASTE_FROM_EXCEL
            if( counter == ( itemColl.length ) ){
                evt.isLastCall=true;
            }else{
                evt.isLastCall=false;
            }
            evt.dispatch();
        }

Это обработчик событий. Он вызывается только один раз, после того как для isLastCall установлено значение true.

private function addItemsFromList( item:itemVo ):void{
            var myObj:ObjVo = new ObjVo();
            myObj.description = item.description;
            myObj.rule = item.objRule;

            this.itemsColl.addItem( myObj );
            this.itemsColl.itemUpdated( myObj );
            this.itemsColl.refresh();
        }

1 Ответ

1 голос
/ 26 сентября 2011

Если вы делаете несколько сотен удаленных вызовов, это может быть сервер, который разочаровывается в вас. Я хотел бы знать, является ли Flash Player настоящим узким местом здесь. AVM2 может сделать несколько тысяч вызовов в течение нескольких миллисекунд.

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

редактирование:

Хорошие двигатели анимации достигают максимума при анимации нескольких свойств 25K-объектов со скоростью 60 кадров в секунду, что составляет более миллиона вызовов (и рендеринг 60 кадров) в секунду. Что-то должно быть совсем не так с вашим кодом.

Вещи, которые медленны в вашем коде:

  • создание экземпляров на порядок дороже, чем простые вызовы. В сценариях, критичных к производительности (которых на самом деле это не так), вам гораздо лучше с пулами объектов или ограничиться примитивами.
  • вызов функциональных объектов вместо методов также является медленным - как следствие этой и предыдущей проблемы, обычно практикуемые механизмы событий медленны до чертиков. Тем не менее, 700 на кадр должны быть без проблем.
  • последний бит кажется самым тревожным. не зная, что обрабатывает событие, трудно понять, но в худшем случае с каждым отправленным событием вы обрабатываете все элементы, что дает вам O (N ^ 2) стоимость времени выполнения и приводит к N*(N+1) стоимости одной итерации и если одна итерация означает перерисовку сетки, то это действительно может пойти не так. В любом случае, мне кажется, достаточно отправить одно событие после всего цикла.
...