Actionscript 3 连续打多少个电话就太多了?

Actionscript 3 连续打多少个电话就太多了?,actionscript-3,apache-flex,flex3,Actionscript 3,Apache Flex,Flex3,我正在调试一些代码,看到了一个循环,其中调度了一个事件,并对每个记录进行了远程调用 一切正常,直到准确地说有几百条记录(700条)。这会让flash播放器发出刺耳的声音吗?我应该转移到排队系统吗?多少张唱片太多了 谢谢你的建议 以下是发送连续调用的更新方法: var counter:int= 0; for each ( var item:ObjectVo in itemColl) { counter = counter + 1;

我正在调试一些代码,看到了一个循环,其中调度了一个事件,并对每个记录进行了远程调用

一切正常,直到准确地说有几百条记录(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();
        }

如果你要打几百个远程电话,那也可能是服务器放弃了你。我想知道Flash Player是否是这里真正的瓶颈。AVM2可以在几毫秒内发出几千次呼叫

我所能提供的这些小信息就是测量完成循环所需的时间,如果真的是那个循环需要时间,那么通过有选择地注释循环体的各个部分,尝试找到最昂贵的位

编辑:

好的tweening引擎最擅长以60FPS的速度在25K对象上设置一些属性的动画,这远远超过每秒一百万次调用(以及60帧的渲染)。你的代码一定出了问题

代码运行缓慢的问题:

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

这似乎是一个有用的链接:你的问题模棱两可。你说在有700个电话之前一切都很好,这意味着这是电话的数量,但是你问这是否是问题所在。你进一步调查了吗?是电话号码吗?你能用本地呼叫替换远程呼叫,看看它是否可用吗?我刚刚分析了应用程序,整个过程大约花了15分钟。当我尝试使用较小的一组,即50张唱片时,大约需要2分钟才能完成。所以,是的,它与通话次数有关。我不能用本地电话代替远程电话,因为我的机器上没有安装服务器。事实上,听到AVM2的消息我很惊讶。我想700个电话足以让flash播放器发出嗡嗡声。我在帖子中添加了代码。每次调用完成后,网格中的数据都会更新。我在原始帖子中更新了代码。没有在每个已调度事件之后调用事件处理程序。相反,它会等待“isLastCall”属性设置为true。不管怎样,我认为一次从UI发出700多个调用是一个糟糕的设计。我想我们可以采取大规模行动来避免这种混乱。但是谢谢你关于慢代码的提示。