2012-01-17 1 views
3

은, 내가 매우 원시적 형 하나를 만들기 위해 강제하고있어, 즉 개체 :Vector 사용시 장점이 있습니까? <Object>을 표준 Array 대신 사용 하시겠습니까? 때문에 동적 벡터를 생성하는 무능력의

var list:Vector.<Object> = new Vector.<Object>(); 

내가 벡터 최대한 가깝게 입력되는 전력을 얻는 있으리라 믿고있어

var list:Array = []; 
var list:Object = {}; 

사람은 여기에 대한 통찰력을 가지고 있습니까 : 정상적인 배열 또는 객체 대신에 위의를 사용하는 경우, 오히려 위보다,하지만 잘못 될 수 있으며,에 - 사실 거기는 여전히 얻는다?

+0

Strick 입력은 항상 빠릅니다. 좋은 읽기 http://www.bobbyberberyan.com/2010/08/as3-array-vs-vector/ –

+1

@The_asMan - Actionscript의 참조 유형에 해당하지 않습니다. –

+0

예 벡터를 통해 반복되는 오버 헤드가 적기 때문입니다. 타입 캐스팅의. –

답변

6

당신은 벡터로부터 어떠한 이득도 얻지 못할 것입니다. < Object> Array와 비교하거나 그 반대로 처리합니다. Vector와 같은 더 촘촘하게 결합 된 Vector를 사용하더라도 기본 데이터 구조는 동일합니다. < Foo>. 값 유형을 사용하는 경우에만 최적화가 이루어집니다. 그 이유는 Ecmascript가 지연 바인딩이고 모든 참조 개체가 동일한 참조 바이트 구조를 공유하기 때문입니다.

그러나 Ecmascript 4 (그 중 Actionscript가 구현 됨)에서는 Vector 일반 데이터 유형이 요소 액세스에 경계 검사를 추가하므로 비 벡터로 인해 배열이 커지므로 기능이 약간 변경되므로 결과적으로 CPU 수 클록 사이클은 조금 변할 것입니다. 그러나 이것은 무시할 만합니다.

+0

요아킴, 이것은 매우 잘못되었습니다. 제네릭 및 유형이 지정된 벡터로 달리 증명할 수있는 벤치 마크가 온라인 상에 많이 있습니다. –

+3

@JonathanDunlap 아니, 그것은 당신 잘못입니다. 벡터는 숫자 유형 (int, uint 및 Number)과 함께 사용할 때만 성능이 향상됩니다. 이 질문을보십시오 : http://stackoverflow.com/questions/8551527/as3-vector-of-arrays/8551727#8551727 – weltraumpirat

+0

@weltraumpirat, 여기에 정보를 불어 넣으십시오. 적어도 원시 타입은 개선을 가져옵니다. heh –

0

훌륭한 질문 - 벡터에는 엄청난 가치가 있습니다! 벡터. vs Array는 차이점의 나쁜 예이지만 벤치 마크는 비슷할 수 있습니다. 그러나 Vector. vs Array는 메모리와 처리면에서 훨씬 뛰어납니다. 속도 향상은 Flash에서 값을 "상자에 넣고"unbox (필요에 따라 여러 수학 연산) 할 필요가 없기 때문에 발생합니다. 또한 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

UPDATE : 내가 본

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>. 
+0

나는 너와 똑같은 방식으로 잘못 인도 되었기 때문에 나는 너를 투표하지 않을 것이다. 그러나 네가 틀렸다. 이 질문을 참조하십시오 : http://stackoverflow.com/questions/8551527/as3-vector-of-arrays/8551727#8551727 – weltraumpirat

+0

음 ... 이것에 대한 벤치 마크를 실행해야합니다. 이론적으로 적어도 Vector의 모든 기본 유형은 빠릅니다. 복잡한 유형이 벡터로부터 이점을 얻지 못한다면 이것은 매우 슬픈 일입니다. :/ –

2

장점 중 하나는 코딩이 깨어 있다는 것이다 벡터를 사용하면 FlashDevelop (및 as3의 대부분의 코딩 도구)가 코드 힌트를 더 잘 수행 할 수 있기 때문에 더 쉽게 사용할 수 있습니다. 그래서 나는 myVector.을 할 수 있고, 내 메소드와 함수를 볼 수 있습니다. 배열은 여러분이 캐스팅하지 않고 그것을 할 수 없게합니다. (이런 종류의 캐스팅은 더 느리지 않고 느리게 만들 수 있다고 소문이났습니다)

배열의 정렬 기능은 더 빠르지 만, 하지만 속도가 늦어지면 연결된 목록 (응용 프로그램 보류 중)에서 더 나은 서비스를 제공 할 수 있습니다.

저는 벡터를 사용하는 것이 올바른 방법이라고 생각합니다.

+0

Vector를 사용할 때 사용할 수있는 코드 힌트를 즐깁니다. – Marty

관련 문제