Сеттер геттер vs прямой доступ
Запись от Tails размещена 18.04.2013 в 22:21
Цель:
В целях удовлетворения любопытства, устроить небольшой тест - сравнение на скорость доступа к переменной через сеттер/геттер и прямой доступ. Очевидно, что сеттер/геттер будет работать медленнее прямого доступа, но насколько? Может, кому то ещё кроме меня будет интересно.
Постановка:
Сперва даём плееру 1 секунду на "разогрев", затем делаем замеры времени на скорость обработки операций инкремента через два разных способа. Сперва через прямой доступ, затем сеттер/геттер. Операция инкремента будет вызывать геттер и сеттер для каждой итераций.
Софт:
Тест проводился в Flash CS5, в версиях флешь плеера 10 и 11.6. Результаты одинаковые. Вывод делался в трейс.
Класс SetterGetter:
package { public class SetterGetter { private var _i:uint; public function SetterGetter() { // constructor code } public function get i():uint{ return _i; } public function set i(value:uint):void{ _i = value; } } }
package { public class Direct { public var i:uint; public function Direct() { // constructor code i = 0; } } }
import flash.utils.Timer; import flash.events.TimerEvent; // Тест на скорость обработки var timer:Timer = new Timer(1000, 1); timer.addEventListener(TimerEvent.TIMER_COMPLETE, onStartTest); timer.start(); const ITERATIONS:uint = 9999999; var test1:SetterGetter = new SetterGetter(); var test2:Direct = new Direct(); var time:Number; trace('--- Start Test of ' + ITERATIONS + ' iterations ---'); function onStartTest(e:TimerEvent):void{ var i:uint; var result1:Number; var result2:Number; // Direct time = getTimer(); for(i = 0; i < ITERATIONS; i++){ test2.i ++; } result1 = getTimer() - time; trace('Direct result: ' + result1 + ' milliseconds'); // Setter getter time = getTimer(); for(i = 0; i < ITERATIONS; i++){ test1.i ++; } result2 = getTimer() - time; trace('Setter getter result: ' + result2 + ' milliseconds'); // Total trace('Difference to: ' + result2 / result1); }
Код:
--- Start Test of 9999999 iterations --- Direct result: 335 milliseconds Setter getter result: 2301 milliseconds Difference to: 6.86865671641791
Конечно, 9999999 итераций это очень много. Но всё же, разница скорости доступа на "микро уровне" варьируется в диапазоне от 5.5 - 7.5. В среднем, скорость доступа к переменной через сеттер геттер в 7 раз медленнее прямого доступа.
сеттер геттер vs прямой доступ.rar
Всего комментариев 16
Комментарии
19.04.2013 14:15 | |
В ASC 2.0 появились функции подстановки (inline). Возможно они спасут сеттеры и геттеры, потестировать-бы.
|
19.04.2013 14:57 | |
Хмм, к чему тесты? Все равно в большинстве случаев без геттеров/сеттеров не обойтись.
|
19.04.2013 19:25 | |
Не очень понятно, зачем нужно было сравнивать разные инструменты.
|
02.05.2013 14:30 | |
Можно поподробнее о распределении памяти при get/set вызовах?
|
05.05.2013 12:01 | |
Tails, как вам идея сравнить JSON с JPEG?
|
Последние записи от Tails
- ДНК Кодировщик (11.01.2016)
- Глюк с normalize в Pixel Bender после 11 версий плеера. (20.08.2015)
- SWF to PNG Converter (29.06.2013)
- Сеттер геттер vs прямой доступ (18.04.2013)
- Основы создания 2д анимации на примере (25.02.2012)