我有以下情况:拥有一个包含4个图表的屏幕,每个图表都填充了59个数组集合。每个数组都有2000多个数据点。
这个构造需要过滤(按时间),但我遇到的问题是过滤完成需要很长时间(考虑到需要过滤的数据点数量,这是预期的) )。
一次过滤一张图表不是选项,所以我想问你认为最好的方法是什么? (我应该使用矢量吗?)。概括这个问题什么是在flex / as3中过滤大型集合的最佳方法?
感谢。
答案 0 :(得分:1)
你必须尽可能地挤出所有可能的性能提升:
尽可能使用Vector,尽可能多地使用Vector。它(与www.flextras.com所假定的相反)具有接受过滤功能的过滤器属性。 ArrayCollections很慢。 (通常所有flex本机类都不必要地慢)所以如果你真的必须使用ArrayCollections,只使用它们来呈现生成的Vector。
如果问题是应用程序“冻结”,您可以查看绿色线程,这样您就可以向用户显示进度条,这样他们至少可以有进步感。 http://blog.generalrelativity.org/actionscript-30/green-threads/
答案 1 :(得分:0)
我建议过滤服务器上的大型集合。这有几个好处:
答案 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。我已经基于这个框架集成了图表,到目前为止结果非常好。