将数组存储在数组类型的向量中是否有任何性能优势?
例如选项 1
private var _arrays:Vector.<Array> = new Vector.<Array>(2);
_arrays[0] = new Array(10);
_arrays[1] = new Array(10);
选项2
private var _arrays:Array = new Array(2);
_arrays[0] = new Array(10);
_arrays[1] = new Array(10);
我还可以有一个或多个向量吗?
private var _vectors:Vector.<Vector> = new Vector.<Vector>(2);
_vectors[0] = new Vector.<String>(10);
_vectors[1] = new Vector.<String>(10);
谢谢
标记
最佳答案
编辑
除了最后一部分之外,我原来的答案是错误的,我必须为此道歉。我知道 Vector 在“底层”恰好有四种实现。 (您可以在 Robert Penner here 的帖子中找到来自 FP 10 playerglobal.swc 的反编译源)其中三个用于数字类型(int、uint 和 Number)。一种是针对对象类型的。最后一个充当包罗万象的角色,包含从 Object 派生的所有类。这就是为什么我假设 Vector.<Object>
还是比Array快,依赖the information regarding vectors and arrays available from Adobe .
但是,这个信息似乎是错误的,或者至少遗漏了一些重要的部分:
同时
Vector.<AnyClassDerivedFromObject>
允许严格类型化,这种类型信息仅在编译时评估(因此您可以获得更多类型安全性),而不是在运行时评估 - 因此本质上严格类型化对象向量的好处并不适用于性能。请参阅this blog post了解更多信息。因此,唯一比 Array 更快的 Vector 实现是数字类型 (!)。
事实上,我对此做了一些广泛的测试,并得出结论:虽然 Vector.<int>
比 Vector.<Object>
的所有派生的整数数组快 60%不仅速度相同(即 Vector.<Object>
与 Vector.<String>
执行相同,它们还比 Array慢大约 20%。我对此进行了双重和三重检查,所以我相信结果相当准确。
数字类型向量确实更快,因此您应该使用它们来获得比数组更高的性能优势。但是:
结束编辑
仅当您要使用sort()
时, sortOn()
或者任何其他方便的 Array 排序函数,您可能仍然会做出其他决定,因为这些是 native 函数,因此非常很快。在 Vector 上实现您自己的排序方法可能无法匹配它们的速度。
关于flash - AS3 数组向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8551527/