我有一个方法,它连接到HTTP服务器并通过XMLRPC请求一个数据结构列表,然后为每个数据结构获取一个属性列表和这些属性的值。它是使用嵌套的for each
循环实现的。
问题在于它一次性加载了大量数据,并且消耗了大量CPU(超过100%)从服务器读取响应并解析XML。
如果我用C编写程序,我会在循环结束时插入usleep()
,等待尝试加载更多数据并降低CPU使用率。 Flex中的等价物是什么?
答案 0 :(得分:3)
flash / flex的一个最大缺点是生成的应用程序是单线程的,因此运行CPU密集型任务(如解析大型响应)将使应用程序冻结。
我用来解决这些问题的一些解决方案是:
如果可能,请不要立即从服务器加载所有内容,而是通过多次调用加载它(即使用10页50个结果而不是500个结果读取数据)。
确保您加载的数据没有直接绑定在某些UI元素上(数据中的更改将触发更多CPU上的更改会消耗更多CPU)
同样返回XML结果并不是最有效的方法(通过BlazeDs使用RemoteObjects更有效率,因为它使用二进制流而不是字符串)。
答案 1 :(得分:0)
在某些情况下,如果您无法控制服务器端数据源,最好坚持使用您可以访问的内容。另一种方法是将getter / setter包装器写入XML对象。 XML是AS3中的一等公民。程序易于阅读(e4x),但我们开发人员编写和修改很烦人。如果可以,获取一个接收到的数据页面将启动另一个请求,同时用户可以处理已加载的页面中的数据。使用串行技术创建并行性的幻觉。