Apache flex 如何在AdobeFlex中限制CPU密集型循环?

Apache flex 如何在AdobeFlex中限制CPU密集型循环?,apache-flex,optimization,adobe,Apache Flex,Optimization,Adobe,我有一个方法,它连接到HTTP服务器并通过XMLRPC请求数据结构列表,然后为每个数据结构获取属性列表和这些属性的值。它使用嵌套的为每个循环实现 问题在于,它一次加载了大量数据,并消耗了大量CPU(超过100%)从服务器读取响应和解析XML 如果我是用C编写程序,我会在循环的末尾插入一个usleep(),以便在尝试加载更多数据和减少CPU使用之前等待。Flex的等效功能是什么?flash/Flex的最大缺点之一是生成的应用程序是单线程的,因此运行CPU密集型任务(如解析大型响应)会使应用程序冻结

我有一个方法,它连接到HTTP服务器并通过XMLRPC请求数据结构列表,然后为每个数据结构获取属性列表和这些属性的值。它使用嵌套的
为每个
循环实现

问题在于,它一次加载了大量数据,并消耗了大量CPU(超过100%)从服务器读取响应和解析XML


如果我是用C编写程序,我会在循环的末尾插入一个
usleep()
,以便在尝试加载更多数据和减少CPU使用之前等待。Flex的等效功能是什么?

flash/Flex的最大缺点之一是生成的应用程序是单线程的,因此运行CPU密集型任务(如解析大型响应)会使应用程序冻结

我用来解决这些问题的一些解决方案是:

  • 如果可能,不要一次从服务器加载所有内容,而是通过多次调用加载(即使用10页50个结果而不是一次500个结果读取数据)

  • 确保您正在加载的数据没有直接绑定到某些UI元素上(数据的更改将触发UI上的更改,这将消耗更多CPU)

  • 尝试通过使用计时器对象来模拟类似线程的模型,并在每个计时器计时点处理数据的子集

另外,返回XML结果并不是最有效的方法(通过BlazeDs使用RemoteObjects更有效,因为它使用二进制流而不是字符串)。

在某些情况下,如果您无法控制服务器端数据源,最好坚持使用您可以访问的内容。另一种选择是将getter/setter包装器写入XML对象。XML是AS3中的头等公民。程序易于阅读(e4x),但编写和修改对我们开发人员来说很烦人。如果可以,获取一页数据,一旦接收到该数据,将启动另一个请求,而用户可以处理已加载页面中的数据。使用串行技术创造并行的假象。

与其尝试交错处理,不如寻求优化。例如,For each循环是循环中最慢的。您还可以切换到具有自动对象转换的AMF格式,我认为这可能有助于解决所有问题b/c二进制AMF格式比XML处理快得多。AMF肯定会给您带来最大的利润。我将普查应用程序的行数增加到100000行,解析时间为0.15秒。不过,我要补充的是,服务器端的序列化速度可能因所选技术而异。我猜它是针对Java(BlazeDS)进行了最优化的@雅各布,谢谢我在搜索中没有发现这个问题。我不介意UI没有响应,因为这是来自本地XMLRPC服务的“项目加载”操作。这听起来像是切换到AMF并在计时器上拉取数据!从我这里。作为对这个答案的扩展,您可以将各种数据集的加载时间与James Wards Census应用程序进行比较:.+1。这些都是我在处理远程数据时所做的事情。我要补充的是,使用AMF而不是XML也非常有益。