Буду делиться тем что делаю.
Vector быстрее Array?
Любопытство не даёт спокойно жить
Провёл такие вот тесты с массивами:
var v:Vector.<int>; var a:Array; var i:int; var j:int; var k:int; var size:int=300; var search:int=299; ///////////////////////////// //Конструктор без указания размера var t1=getTimer(); for(i=0;i<100000;i++) v=new Vector.<int>(); t1=getTimer()-t1; var t2=getTimer(); for(i=0;i<100000;i++) a=new Array(); t2=getTimer()-t2; ///////////////////////////// //Конструктор с указанием размера var t3=getTimer(); for(i=0;i<100000;i++) v=new Vector.<int>(size,true); t3=getTimer()-t3; var t4=getTimer(); for(i=0;i<100000;i++) v=new Vector.<int>(size); t4=getTimer()-t4; var t5=getTimer(); for(i=0;i<100000;i++) a=new Array(size); t5=getTimer()-t5; ///////////////////////////// //Доступ к элементу для записи v=new Vector.<int>(size,true); a=new Array(size); var t6=getTimer(); for(i=0;i<100000;i++) for(j=0;j<size;j++) v[j]=10; t6=getTimer()-t6; var t7=getTimer(); for(i=0;i<100000;i++) for(j=0;j<size;j++) a[j]=10; t7=getTimer()-t7; ///////////////////////////// //Доступ к элементу для чтения var t8=getTimer(); for(i=0;i<100000;i++) for(j=0;j<size;j++) k=v[j]; t8=getTimer()-t8; var t9=getTimer(); for(i=0;i<100000;i++) for(j=0;j<size;j++) k=a[j]; t9=getTimer()-t9; ///////////////////////////// //Заполнение пустого массива var t10=getTimer(); for(i=0;i<100000;i++) { v=new Vector.<int>(); for(j=0;j<size;j++) v.push(j); } t10=getTimer()-t10; var t11=getTimer(); for(i=0;i<100000;i++) { a=new Array(); for(j=0;j<size;j++) a.push(j); } t11=getTimer()-t11; ///////////////////////////// //Поиск элемента search var t12=getTimer(); for(i=0;i<10000;i++) k=v.indexOf(search); t12=getTimer()-t12; var t13=getTimer(); for(i=0;i<10000;i++) k=a.indexOf(search); t13=getTimer()-t13; ///////////////////////////// //Показываем что получилось и сравниваем) trace("Конструктор без указания размера",t1,t2); trace("Конструктор с указанием размера",t3,t4,t5); trace("Доступ к элементу для записи",t6,t7); trace("Доступ к элементу для чтения",t8,t9); trace("Заполнение пустого массива",t10,t11); trace("Поиск элемента search",t12,t13);
size=300,search=0
Код:
Конструктор без указания размера 173 209 Конструктор с указанием размера 300 302 268 Доступ к элементу для записи 577 1315 Доступ к элементу для чтения 530 829 Заполнение пустого массива 5724 6892 Поиск элемента search 6 5
Код:
Конструктор без указания размера 179 212 Конструктор с указанием размера 285 276 267 Доступ к элементу для записи 569 1319 Доступ к элементу для чтения 531 823 Заполнение пустого массива 5708 7464 Поиск элемента search 88 97
Другие операции проверяйте сами, мне были нужны только эти
Всего комментариев 1
Комментарии
17.12.2011 20:32 | |
Операции требующие перестройки у Vector'a медленнее работают. Например вставка и удаление произвольных элементов.
Правда, различие небольшое, по крайней мере на дебажном флешплеере в релизной флешке: package { import flash.display.Sprite; import flash.events.Event; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.utils.getTimer; public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); var time:int; var vectorTime:int; var arrayTime:int; var i:int; var array:Array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]; var vector:Vector.<int> = Vector.<int>(array); time = getTimer(); for (i = 0; i < 10000; i++) { array.splice(2, 1); array.splice(2, 0, 12); } arrayTime = getTimer() - time; time = getTimer(); for (i = 0; i < 10000; i++) { vector.splice(2, 1); vector.splice(2, 0, 12); } vectorTime = getTimer() - time; tf.appendText("splice(2, 1): vectorTime=" + vectorTime + ", arrayTime=" + arrayTime); //splice(2, 1): vectorTime=184, arrayTime=142 } } } var tf:TextField = new TextField(); tf.autoSize = TextFieldAutoSize.LEFT; addChild(tf); var time:int; var vectorTime:int; var arrayTime:int; var i:int; var array:Array = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 ]; var vector:Vector.<int> = Vector.<int>(array); time = getTimer(); for (i = 0; i < 10000; i++) { array.splice(i, 0, i); } arrayTime = getTimer() - time; time = getTimer(); for (i = 0; i < 10000; i++) { vector.splice(i, 0, i); } vectorTime = getTimer() - time; tf.appendText("splice(2, 1): vectorTime=" + vectorTime + ", arrayTime=" + arrayTime); //splice(2, 1): vectorTime=93, arrayTime=321 |
|
Обновил(-а) expl 17.12.2011 в 21:10
|
Последние записи от Герыч
- Массив объектов или несколько массивов? (16.08.2009)
- SVN (16.08.2009)
- Box2D и магическое 30 (13.08.2009)
- Двойное деление vs Мозги (09.08.2009)
- Желе: убраны многие баги + появилась смена состояний (03.08.2009)