如何限制Adobe Flex中的CPU密集型循环?

时间:2011-08-17 20:13:22

标签: flex optimization adobe

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

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

如果我用C编写程序,我会在循环结束时插入usleep(),等待尝试加载更多数据并降低CPU使用率。 Flex中的等价物是什么?

2 个答案:

答案 0 :(得分:3)

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

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

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

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

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

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

答案 1 :(得分:0)

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