ArrayCollection快速过滤

时间:2011-09-19 08:32:42

标签: flex actionscript-3

我有以下情况:拥有一个包含4个图表的屏幕,每个图表都填充了59个数组集合。每个数组都有2000多个数据点。

这个构造需要过滤(按时间),但我遇到的问题是过滤完成需要很长时间(考虑到需要过滤的数据点数量,这是预期的) )。

一次过滤一张图表不是选项,所以我想问你认为最好的方法是什么? (我应该使用矢量吗?)。概括这个问题什么是在flex / as3中过滤大型集合的最佳方法?

感谢。

4 个答案:

答案 0 :(得分:1)

你必须尽可能地挤出所有可能的性能提升:

  • 尽可能使用Vector,尽可能多地使用Vector。它(与www.flextras.com所假定的相反)具有接受过滤功能的过滤器属性。 ArrayCollections很慢。 (通常所有flex本机类都不必要地慢)所以如果你真的必须使用ArrayCollections,只使用它们来呈现生成的Vector。

  • 如果问题是应用程序“冻结”,您可以查看绿色线程,这样您就可以向用户显示进度条,这样他们至少可以有进步感。 http://blog.generalrelativity.org/actionscript-30/green-threads/

答案 1 :(得分:0)

我建议过滤服务器上的大型集合。这有几个好处:

  • 您可以最小化网络流量,因为只需要传输过滤后的数据
  • 服务器端计算可以并行化,并且通常更快,因为更高性能的硬件和服务器的运行时语言(例如Java)。
  • 服务请求是异步完成的,因此您的客户端应用程序不会被阻止

答案 2 :(得分:0)

尽可能使用矢量,如果仍然无法管理,请使用绿色线程。在内部,我们使用大量字典来缓存计算查询以供以后查找。 as3中的字典是最快的对象之一。因此,我们在背景中预先过滤并在字典中讲述各种过滤集合。不确定它是否适用于您的情况。

答案 3 :(得分:0)

好的,所以我搜索了更多的绿色线程,并偶然发现了gskinner(PerformanceTestv2)的项目。测试数据生成与渲染时间的关系得到了以下结果:

[MethodTest name ='设置增益系列测试:'时间= 1056.0分钟= 1056最大= 1056偏差= 0.000内存= 688] //过滤数据源

[MethodTest name ='设置增益系列测试:'时间= 24810.0分钟= 24810最大= 24810偏差= 0.000内存= 16488] //过滤+渲染。

接下来我看了如何改善图表的渲染时间,但没有太大改进。但是我确实找到了一个基于Degrafa的项目:Axis。这已被移植到flex 4,事件4.5([Axiss 4.5])3。我已经基于这个框架集成了图表,到目前为止结果非常好。