Буду делиться тем что делаю.
Массив объектов или несколько массивов?
Запись от Герыч размещена 16.08.2009 в 18:51
Забавный факт я недавно обнаружил - по возможности лучше не использовать объекты.
По идее, доступ к элементу массива - достаточно медленная операция и лучше уменьшать их количество. Но оказывается в ActionScript доступ к свойству объекта намного медленней.
Вот к примеру, как лучше хранить координаты точки? в двух массивах или в массиве объектов? Ответ: в двух массивах.
Вот моё доказательство:
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);
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; } } }
Увеличение количества полей в классе Point2D и количества массивов результат не улучшает
Вывод: по возможности(особенно в критическом коде) отказывайтесь от использования объектов.
P.S. не думайте, что я противник ООП, просто иногда нужно много таких вот небольшие оптимизаций для достижения общей скорости.
Всего комментариев 0
Комментарии
Последние записи от Герыч
- Массив объектов или несколько массивов? (16.08.2009)
- SVN (16.08.2009)
- Box2D и магическое 30 (13.08.2009)
- Двойное деление vs Мозги (09.08.2009)
- Желе: убраны многие баги + появилась смена состояний (03.08.2009)