Vector 클래스를 사용하면 Array 클래스보다 읽기 및 쓰기 액세스가 빠릅니다.
간단한 벤치마크를 실행해 보면 Array 클래스 대비 Vector 클래스의 이점이 크다는 것을 알 수 있습니다. 다음 코드는 Array 클래스에 대한 벤치마크를 보여 줍니다.
var coordinates:Array = new Array(); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 107
다음 코드는 Vector 클래스에 대한 벤치마크를 보여 줍니다.
var coordinates:Vector.<Number> = new Vector.<Number>(); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 72
이 예제는 벡터에 특정 길이를 할당하고 해당 길이를 고정된 값으로 설정하여 좀 더 최적화할 수 있습니다.
// Specify a fixed length and initialize its length var coordinates:Vector.<Number> = new Vector.<Number>(300000, true); var started:Number = getTimer(); for (var i:int = 0; i< 300000; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 48
벡터의 크기를 사전에 지정하지 않은 경우 벡터의 공간이 부족해지면 크기가 증가합니다. 벡터의 크기가 증가할 때마다 새로운 메모리 블록이 할당됩니다. 벡터의 현재 내용은 새로운 메모리 블록에 복사됩니다. 이러한 추가 할당 및 데이터 복사는 성능에 좋지 않은 영향을 줍니다. 위 코드는 벡터의 초기 크기를 지정하여 성능을 위해 최적화되어 있습니다. 그러나 유지 관리 면에서는 이 코드가 최적화되어 있지 않습니다. 유지 관리 편의성도 향상시키려면 다음과 같이 다시 사용되는 값을 상수로 저장하십시오.
// Store the reused value to maintain code easily const MAX_NUM:int = 300000; var coordinates:Vector.<Number> = new Vector.<Number>(MAX_NUM, true); var started:Number = getTimer(); for (var i:int = 0; i< MAX_NUM; i++) { coordinates[i] = Math.random()*1024; } trace(getTimer() - started); // output: 47
'AS3 > Tip' 카테고리의 다른 글
플래시빌더(Flash Builder)에 Flex SDK 또는 AIR SDK 설치 방법 (0) | 2011.06.17 |
---|---|
[최적화] 표시객체의 메모리 체크 (0) | 2011.06.02 |
Extention Manager 플러그인이 설치되지 않는 문제해결 (2) | 2011.03.28 |
파이어폭스에서 플래시 trace를 찍어보자 (0) | 2011.01.10 |
플래시 상대경로 설정 (0) | 2010.12.08 |