Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Блоги > Идеи и творения

Буду делиться тем что делаю.
Оценить эту запись

Массив объектов или несколько массивов?

Запись от Герыч размещена 16.08.2009 в 18:51

Забавный факт я недавно обнаружил - по возможности лучше не использовать объекты.
По идее, доступ к элементу массива - достаточно медленная операция и лучше уменьшать их количество. Но оказывается в ActionScript доступ к свойству объекта намного медленней.
Вот к примеру, как лучше хранить координаты точки? в двух массивах или в массиве объектов? Ответ: в двух массивах.
Вот моё доказательство:
Код AS3:
var t1:int;
var t2:int;
var count:int=10;
var size:int=100000;
var i:int;
var j:int;
var sx:Number;
var sy:Number;
 
var px:Vector.<Number>;
var py:Vector.<Number>;
 
var ap:Vector.<Point2D>;
var p:Point2D;
 
px=new Vector.<Number>(size);
py=new Vector.<Number>(size);
for(j=0;j<size;j++)
{
	px[j]=Math.random();
	py[j]=Math.random();
}
 
ap=new Vector.<Point2D>(size);
for(j=0;j<size;j++)
	ap[j]=new Point2D(Math.random(),Math.random());
 
t1=getTimer();
for(i=0;i<count;i++)
{
	sx=0;
	sy=0;
	for(j=0;j<size;j++)
	{
		sx+=px[j];
		sy+=py[j];
	}
}
t1=getTimer()-t1;
t2=getTimer();
for(i=0;i<count;i++)
{
	sx=0;
	sy=0;
	for(j=0;j<size;j++)
	{
		p=ap[j];
		sx+=p.x;
		sy+=p.y;
	}
}
t2=getTimer()-t2;
 
trace(t1,t2);
Код AS3:
package{
	public class Point2D
	{
		public var x:Number;
		public var y:Number;
 
		public function Point2D(x:Number,y:Number):void
		{
			this.x=x;
			this.y=y;
		}
	}
}
Этот злобный тест выдал мне такой результат: 40 93
Увеличение количества полей в классе Point2D и количества массивов результат не улучшает

Вывод: по возможности(особенно в критическом коде) отказывайтесь от использования объектов.
P.S. не думайте, что я противник ООП, просто иногда нужно много таких вот небольшие оптимизаций для достижения общей скорости.
Всего комментариев 0

Комментарии

 

 


Часовой пояс GMT +4, время: 01:56.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.