Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Как после компиляции выглядят ссылки на свойства (http://www.flasher.ru/forum/showthread.php?t=207326)

alexcon314 09.04.2014 22:57

Как это на вас похоже: взять совершенно разумную идею, соорудить к ней нелепый тест и гордо объявить во всеуслышание "черное" "белым" под еще более нелепым названием темы.

Не нужно иметь семи пядей во лбу и перечитать пол-интернета, чтобы понять элементарную вещь: обращение к свойсву объекта осуществляется через оператор "." (точка), к локальной переменной обращение идет напрямую. Что быстрее?

silin 09.04.2014 23:39

>>А скаут, разницы во времени такую мизерную, как-будто не замечает, а я именно за неё и борюсь.

ну ясно, серьезный подход, прогрев плеера, вариативность циклов, внушает..
но, если простейший тест на милионах итераций показывает разницу, сопоставимую с точностью системного таймера, у меня, например, нет никаких сомнений, что ловить здесь нечего
и еще не надо забывать, что на другом железе\ОС\плеере ситуация может оказаться совсем другой, вплоть до противоположной

>>обращение к свойсву объекта осуществляется через оператор "." (точка), к локальной переменной обращение идет напрямую. Что быстрее?

вроде бы напрямую должно быть быстрее, но почему-то тест (пост №9) этого не показывает
а в стародавние времена, бывало показывал.. Ж)
я склонен думать, что плеер научили это делать самому, а может и всегда так было и это миф такой..

Akopalipsis 09.04.2014 23:49

Цитата:

и гордо объявить во всеуслышание
Возможно это Вы вспоминаете свои чувства, которые испытывали при написании статей в блоге?
Не буду говорить за всех, я не такой! Мне гордо заявлять, даже если бы и было, то я это сделал по скромному:D По этому мне даже смешно, когда на меня то троля нацепить хотят, то гордого заявляющего,
то ещё чего-то. Из-за Вас я вообще уже боюсь темы создавать на форуме, и создавая их, уже трясусь от мыслей, что мой бан зависит от какой-то магнитной бури.
Соорудил я к ней тест... да, но еслиб молчал, то во первых, так бы и пользовался нелепым тестом, а во вторых, если даже я делаю тест в релизе и без энтерфрейм, то результаты, как в самом начале.
А что быстрее, я же вроде написал, что был уверен до сегодняшнего момента, что быстрее локальная.

один из многих -
Код AS3:

write:
loopTime : 536
memberProp : 597
localProp : 594
staticProp : 700
objProp : 590
dynamicProp : 6061
accessProp : 6414
read:
loopTime : 505
memberProp : 502
localProp : 500
staticProp : 515
objProp : 495
dynamicProp : 3949
accessProp : 5813

а иногда бывает вот так -
Код AS3:

write:
loopTime : 524
memberProp : 562
localProp : 552
staticProp : 665
objProp : 570
dynamicProp : 5682
accessProp : 5951
read:
loopTime : 494
memberProp : 503
localProp : 490
staticProp : 522
objProp : 500
dynamicProp : 4083
accessProp : 5871

Добавлено через 2 минуты
И вот при таком раскладе, проще всего забыть о сохранении значения в локальную переменную,
хотя бы при одной точки. И вот такие результаты через раз, то больше, то меньше.

Добавлено через 5 минут
Только хотел уже закрыть этот класс, но думаю дай ещё раз нажму с закрытым браузером, в котором флеш плеер с музыкой ( хоть и выключена )...
Код AS3:

write:
loopTime : 500
memberProp : 572
localProp : 590
staticProp : 680
objProp : 570
dynamicProp : 6075
accessProp : 6008
read:
loopTime : 490
memberProp : 523
localProp : 482
staticProp : 510
objProp : 480
dynamicProp : 4091
accessProp : 5813

Добавлено через 31 секунду
Наверное я такой глупый, что надо мной даже плеер смеется:D

Добавлено через 11 минут
И такие результаты даже если сделать класс из примера silin'a не динамическим ( это я уже на всякий случай попробовал, так-как не знаю как себя ведёт класс помеченный dynamic ). И ещё что бросается в глаза, что если разница есть с записью, то разница при чтении почти не когда не бывает в пользу локальных переменных.

ChuwY 10.04.2014 05:09

А можно еще разок прогнать релиз-билд недебаговым плеером.

alexcon314 10.04.2014 08:42

Ну, вот заставь Akopalipsis'a б-гу молиться... весь лоб расшибет.
Код AS3:

package
{
        import flash.display.Sprite;
        import flash.events.TimerEvent;
        import flash.text.TextField;
        import flash.text.TextFieldAutoSize;
        import flash.utils.getTimer;
        import flash.utils.Timer;
 
 
        public class Main extends Sprite
        {
                private const N:int = 5e7;
                private const D:int = 5000;
                private const C:int = 100;
                private var timer:Timer;
                private var memberProp:int;
                private static var staticProp:int
                private var tf:TextField = new TextField();
                private var member_store:int = 0;
                private var local_store:int = 0;
                private var static_store:int = 0;
 
                public function Main()
                {
                        tf.autoSize = TextFieldAutoSize.LEFT;
                        addChild(tf);
                        timer = new Timer(D, C);
                        timer.addEventListener(TimerEvent.TIMER, test);
                        timer.addEventListener(TimerEvent.TIMER_COMPLETE, result);
                        timer.start();
                }
 
                private function result(e:TimerEvent):void {       
                        tf.appendText( "\nmemberProp (avg): " + member_store / C);
                        tf.appendText( "\nlocalProp (avg) : " + local_store / C);
                        tf.appendText( "\nstaticProp (avg) : " + static_store / C);
                        timer.stop();
                }
                private function test(e:TimerEvent):void
                {       
                        tf.text = "Current tick: " + timer.currentCount;
                        //writeTest();                       
                        //readTest();
                        /*
                        * нужный тест раскомментровать
                        * скомпилировать
                        * запустить
                        */

                }
 
                private function writeTest():void
                {
 
                        var i:int;
                        var t:Number;
                        var localProp:int=0;
 
                        for (i = 0, t = getTimer(); i < N; i++) memberProp = 0;
                        member_store += (getTimer() - t);
 
                        for (i = 0, t = getTimer(); i < N; i++) localProp = 0;
                        local_store += (getTimer() - t);
 
                        for (i = 0, t = getTimer(); i < N; i++) staticProp = 0;
                        static_store += (getTimer() - t);
                }
 
                private function readTest():void
                {
 
                        var i:int;
                        var t:Number;
                        var localProp:int = 0;
 
                        for (i = 0, t = getTimer(); i < N; i++) memberProp;
                        member_store += (getTimer() - t);
 
                        for (i = 0, t = getTimer(); i < N; i++) localProp;
                        local_store += (getTimer() - t);
 
                        for (i = 0, t = getTimer(); i < N; i++) staticProp;
                        static_store += (getTimer() - t);
 
                }
        }
}

Цитата:

//FP 11.7 release
//Flex 4.6 FD 4.4.3
//Build: Release
//Win 7 Pro x64 Core i3 6Gb
//N = 5e7, D = 5000, C = 100

//readTest()
Current tick: 100
memberProp (avg) : 124.62
localProp (avg) : 105.01
staticProp (avg) : 103.94

//writeTest()
Current tick: 100
memberProp (avg) : 132.95
localProp (avg) : 107.54
staticProp (avg) : 254.19
Физкульт-привет "некогданам"!


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

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