由于无法动态创建Vector,我不得不创建一个非常原始的类型,即Object:
var list:Vector.<Object> = new Vector.<Object>();
我假设Vector通过尽可能接近而不是上面的方式来获得它的能力,但我可能是错的,当使用上面的代替普通的数组或对象时,实际上仍然有收获:
var list:Array = [];
var list:Object = {};
有没有人对此有任何见解?
答案 0 :(得分:6)
您不会从Vector中获得任何好处。&lt;对象&gt;与Array相比,反之亦然。即使你有一个更紧密耦合的矢量,例如Vector,底层数据结构也是一样的。 Foo&gt;。如果您使用值类型,唯一的优化收益。原因是Ecmascript仍然是后期绑定,所有引用对象共享相同的引用字节结构。
然而,在Ecmascript 4中(其中Actionscript是一个实现),Vector泛型数据类型添加了对元素访问的边界检查(非向量将简单地增长数组),因此功能略有不同,因此CPU时钟数量也不同周期会有所不同。然而,这可以忽略不计。
答案 1 :(得分:2)
我看到的一个优点是使用向量编码更容易,因为FlashDevelop(以及as3的大多数编码工具)可以更好地进行代码提示。所以我可以做myVector.
并查看我的方法和函数,如果没有强制转换myArr[2] as myObject
,数组将不会让你这样做(认为这种类型的转换是为了让它更快,而不是更慢)
然而,数组的排序函数更快,但如果它是你所追求的速度,你可能会更好地服务于链表(等待应用程序)
我认为使用矢量是编码的正确方法,但不一定更好。
答案 2 :(得分:0)
优秀的问题 - 矢量具有巨大的价值!向量。 vs Array虽然是差异的一个不好的例子,但基准可能是相似的。但是,矢量。 vs Array在内存和处理方面都非常出色。速度改进来自Flash,不需要“盒子”和“取消装箱”这些值(需要多次数学运算)。此外,Array不能像键入的Vector那样有效地分配内存。严格打字的集合几乎总是更好。
基准: http://jacksondunstan.com/articles/636 http://www.mikechambers.com/blog/2008/09/24/actioscript-3-vector-array-performance-comparison/
甚至.NET也遭受拳击收藏(数组): http://msdn.microsoft.com/en-us/library/ms173196.aspx
<强>更新强>:
I've been corrected! Only primitive numeric types get a performance enhancement
from Vectors. You won't see any improvement with Array vs Vector.<Object>.