连续多少次电话太多了?

时间:2011-09-26 15:26:18

标签: actionscript-3 flex flex3

我正在调试一些代码并查看调度事件的循环,并为每条记录进行远程调用。

一切正常,直到有数百条记录(700)才是确切的。这是否会让flash播放器突然出现?我应该转移到排队系统吗?有多少记录太多了?

感谢任何有用的提示。

以下是发送连续调出的更新方法:

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 个答案:

答案 0 :(得分:1)

如果您正在拨打几百个远程呼叫,那么它也可能是服务器,它会放弃您。我想知道Flash Player是否真的是瓶颈。 AVM2可以在几毫秒内完成几千次呼叫。

我可以用这个小信息来建议测量你的循环完成所需的时间,如果它真的是需要时间的循环,试着通过有选择地注释循环体的各个部分找到最昂贵的位。

修改

良好的补间引擎在60FPS的25K对象上为一些属性设置动画效果达到顶峰,这超过了每秒100万次调用(以及60帧的渲染)。你的代码肯定有问题。

您的代码速度缓慢的事情:

  • 实例化比简单调用贵几个数量级。在性能关键场景中(实际上并非如此),您可以更好地使用对象池或将自己限制为基元。
  • 调用函数对象而不是方法也很慢 - 由于这个和之前的问题,常见的事件机制很慢。每帧仍然700个应该没问题。
  • 最后一点似乎是最令人不安的。在不知道处理事件的内容的情况下,很难知道,但是对于每个调度的事件,最糟糕的情况是,您处理所有项目,这会给您带来O(N ^ 2)运行时成本并导致N*(N+1)单个成本迭代,如果单个迭代意味着重绘网格,那么这可能真的出错了。无论如何,我认为在整个循环之后调度一个事件就足够了。