Показать сообщение отдельно
Старый 26.02.2016, 09:13
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 11  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Только что обнаружил где я тупанул с тестом. Все таки FOR быстрее, чем FOR IN и FOR EACH IN.
Проблема теста здесь:
Код AS3:
for (i = 0; i < length; i++) {
	obj = array[i]; // вот тут я сделал присвоение, а надо было сразу обращаться к array[i].t 
	obj.t = 0;
}
Присвоение переменной и отжирало дополнительное время. Мой косяк.
Самый быстрый FOR (при условии, что длинна массива сразу записывается в переменную), на втором месте FOR EACH IN, а FOR IN - самый медленный.
Вот новый тест
Код AS3:
var i:int = 0;
var time:int = 0;
var vec:Vector.<Object> = new Vector.<Object>();
var arr:Array = [];
var length:int = 0;
var j:Object;
 
for (i = 0; i < 10000000; i++) {
	var obj:Object = { t: 0 };
	vec[i] = obj;
	arr[i] = obj;
}
 
var tf:TextField = new TextField();
tf.width = 800;
tf.height = 600;
addChild(tf);
 
// VECTOR TEST START
time = getTimer();
length = vec.length;
for (i = 0; i < length; i++) {
	vec[i].t = 1;
}
tf.appendText("Vector for i " + (getTimer() - time) + "\n");
// ARRAY TEST START
time = getTimer();
length = arr.length;
for (i = 0; i < length; i++) {
	arr[i].t = 2;
}
tf.appendText("Array for i " + (getTimer() - time) + "\n"); 
 
// VECTOR FOR EACH IN
time = getTimer();
for each (obj in vec) {
	obj.t = 3;
}
tf.appendText("Vector for each in " + (getTimer() - time) + "\n"); 
 
// ARRAY FOR EACH IN
time = getTimer();
for each (obj in arr) {
	obj.t = 4;
}
tf.appendText("Array for each in " + (getTimer() - time) + "\n"); 
 
// VECTOR FOR IN
time = getTimer();
for (j in vec) {
	vec[j].t = 3;
}
tf.appendText("Vector for in " + (getTimer() - time) + "\n"); 
 
// ARRAY FOR IN
time = getTimer();
for (j in arr) {
	arr[j].t = 4;
}
tf.appendText("Array for in " + (getTimer() - time) + "\n");
Результаты
Цитата:
Vector for i 430
Array for i 435
Vector for each in 620
Array for each in 609
Vector for in 671
Array for in 674
Но вот что меня немного удивило на этот раз, это то, что вектор не выдал какой-либо существенной разницы по сравнению с простым массивом на однотипных объектах.
__________________
Ко мне можно и нужно обращаться на ты)