Apache flex 处理成千上万的数据

Apache flex 处理成千上万的数据,apache-flex,loops,vector,actionscript,Apache Flex,Loops,Vector,Actionscript,我在处理成千上万的数据时遇到了问题。 这个场景是:在一个集合(向量)中循环使用40000多个对象,只绘制彼此不重叠的项; 目前我确实: -我划分可以画正方形的区域(一个向量,包含所有标识正方形的点); -对于向量中的每个项目。我在方块中循环,找出物品所属的区域; -我画向量中的第一项。我将绘制的项目添加到向量中。已提取项目的数量 -对于所有剩余的项目,我检查我必须绘制的项目是否与通过向量循环的所属区域中已经绘制的项目重叠。绘制的项目:如果它不重叠,我绘制它并将其添加到向量。对于已绘制的项目,如果

我在处理成千上万的数据时遇到了问题。 这个场景是:在一个集合(向量)中循环使用40000多个对象,只绘制彼此不重叠的项; 目前我确实: -我划分可以画正方形的区域(一个向量,包含所有标识正方形的点); -对于向量中的每个项目。我在方块中循环,找出物品所属的区域; -我画向量中的第一项。我将绘制的项目添加到向量中。已提取项目的数量 -对于所有剩余的项目,我检查我必须绘制的项目是否与通过向量循环的所属区域中已经绘制的项目重叠。绘制的项目:如果它不重叠,我绘制它并将其添加到向量。对于已绘制的项目,如果重叠,则不绘制。
为了加速循环,我使用dictionary和vector,声明循环外的所有变量,并使用Duff的actionscript设备

我的问题是循环仍然很慢(大约9秒)。有什么想法吗

我推荐Alex的伪线程策略

公共类伪线程扩展EventDispatcher
{
公共函数伪线程(sm:ISystemManager、threadFunction:function、threadObject:Object)
{
fn=螺纹功能;
obj=线程对象;
//为输入帧添加高优先级侦听器
sm.stage.addEventListener(Event.ENTER_FRAME,enterFrameHandler,false,100);
sm.stage.addEventListener(MouseEvent.MOUSE\u MOVE,mouseMoveHandler);
sm.stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownHandler);
线程=新的UIComponent();
sm.addChild(线程);
addEventListener(Event.RENDER、renderHandler);
}
//我们认为渲染屏幕所需的毫秒数
公共风险价值扣减:int=10;
私有var-fn:函数;
私有变量obj:对象;
私有var线程:UIComponent;
私有变量开始:编号;
到期私人var:数字;
私有变量mouseEvent:Boolean;
private-var-keyEvent:Boolean;
私有函数enterFrameHandler(事件:事件):void
{
start=getTimer();
var-fr:Number=Math.floor(1000/thread.systemManager.stage.frameRate);
到期日=开始日+fr;
thread.systemManager.stage.invalidate();
thread.graphics.clear();
thread.graphics.moveTo(0,0);
thread.graphics.lineTo(0,0);
}
私有函数renderHandler(事件:event):void
{
if(mouseEvent | | keyEvent)
到期-=扣减;
while(getTimer()
如果我没记错的话,向量比数组慢

此外,使用:

var i:uint = 0;
for(i; i < v.length(); i++)
(不确定如何循环)


也考虑转移和创建数组而不是一个巨大的计算吗?将其拆分为不同的阵列最终可能需要更少的计算

假设这不是一个移动项目,询问者可以使用使用AS3 Worker的实际线程,尽管这将有助于防止长时间不活动。这不是一个移动项目。我不关心UI冻结,但我需要加速函数,比较我已经绘制的点。我认为建议的选项(模拟多线程)只能解决冻结用户界面的问题,但整个过程所需的时间总是超过我希望达到的平均3秒。也欢迎采用不同的方法,而不是循环绘制项目
var i:uint = 0;
for(i; i < v.length(); i++)
for each(asdf in asdf)