Форум 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=129347)

TanaTiX 30.08.2009 19:33

Скорость сравнения
 
Чисто академический интерес, может кто знает...
Вот только что у О`Релли прочитал, что оператор сравнения if работает быстрее чем swich. А вот в отношении тернарного =?: ничего не нахожу.
Заранее спасибо если кто ответит.

ЗЫ. понятно, что if гораздо гибче, но я имею в виду исключительно однотипные задачи.

Smrad 30.08.2009 19:50

Зачем размышлять, если написать тест можно за две минуты и все увидеть?

Psycho Tiger 31.08.2009 00:20

Знакомый делал тест такой буквально вот-вот. Наверно, вы его сподвигли. Одинаково.

Если речь о <=, ==, >= как я понял.

Герыч 31.08.2009 13:12

мой шаблон для тестов:
Код AS3:

var t1:int;
var t2:int;
var count:int=10000;
var i:int;
 
t1=getTimer();
for(i=0;i<count;i++)
{
        //вставляем действие 1
}
t1=getTimer()-t1;
t2=getTimer();
for(i=0;i<count;i++)
{
        //вставляем действие 2
}
t2=getTimer()-t2;
 
trace(t1,t2);

Вставляй тестируемые операции вовнутрь и проверяй!

TanaTiX 01.09.2009 00:54

Герыч, самое интересное что при значительном количестве итераций всегда получаются разные значения, при этом при текущем положении вещей (см. код) незначительное преимущество у одного метода, а если в 5 раз меньше поставить - наоборот. Но главный вывод - что при незначительном количестве итераций (в данной ситуации думаю таковым можно считать 10000) разницы никакой нет.
Код AS3:

package {
        import flash.display.Sprite;
        import flash.utils.getTimer;
        public class Main extends Sprite {
                public function Main():void {
                        var t1:int;
                        var t2:int;
                        var a:uint=0;
                        var count:int=50000000;
                        var i:int;
                        t1=getTimer();
                        for (i=0; i<count; i++) {
                                if (2>3) {
                                        a=5;
                                } else {
                                        a=1;
                                }
                        }
                        t1=getTimer()-t1;
                        t2=getTimer();
                        for (i=0; i<count; i++) {
                                a=(2>3)?5:1;
                        }
                        t2=getTimer()-t2;
 
                        trace(t1,t2);
                }
        }
}

Если кому есть что добавить или поправить...

Герыч 01.09.2009 01:06

нет, нечего, только конкретней, какой метод выигрывает при больших значениях? А то я лентяй и не хочу тест проводить)

etc 01.09.2009 07:49

Не занимайтесь ерундой, разницу вы ощутите только при десятках миллионов итераций, т. е. фактически никогда.

TanaTiX 01.09.2009 14:04

etc, отзанимался, больше не буду :)
Герыч, абсолютно согласен с etc. Выше писал, что до 10000 и даже больше в результате выходят одинаковые значения, а если увеличивать количество итераций, то скорее флеш зависнет по времени выполнения скрипта.

ИМХО тему можно считать исчерпанной.


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

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