Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Что быстрее работает Switch или If операторы (http://www.flasher.ru/forum/showthread.php?t=184181)

Isfet 12.09.2012 21:47

Что быстрее работает Switch или If операторы
 
Что быстрее работает Switch или If операторы?Тестировал кто нибудь? поделитесь опытом

caseyryan 12.09.2012 22:00

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

Tails 12.09.2012 22:28

Собственно, тесты:

1. Тест на сравнение '==', результат:
Код:

Test started, 100000000 iterattions!
if:        1453 milisecconds
switch:        1831 milisecconds
version: WIN 10,1,52,14

2. Тест на условие '<', результат:
Код:

Test started, 100000000 iterattions!
if:        1272 milliseconds
switch:        6568 milliseconds
version: WIN 10,1,52,14

Код тестов одинаковый, меняются лишь условия:
Код AS3:

import flash.events.TimerEvent;
import flash.utils.Timer;
import flash.system.Capabilities;
 
var test:int = 100000000;
var timer:Timer = new Timer(1000, 1);
timer.addEventListener(TimerEvent.TIMER_COMPLETE, startTest);
timer.start();
trace('Test started, '+test+' iterattions!');
 
function startTest(e:TimerEvent):void{
        var b:int = 0;
        var timeStart:Number = getTimer();
 
        for(var i:int = 0; i<test; i++){
 
                if(i<0){
                b++;
                }else if(i<0){
                b++;
                }else if(i<0){
                b++;
                }
        }
 
        trace('if:        '+(getTimer()-timeStart)+' milliseconds');
        b = 0;
        timeStart = getTimer();
 
        for(var j:int = 0; j<test; j++){
                switch(j){
                        case j<0:
                        b++;
                        break;
 
                        case j<0:
                        b++;
                        break;
 
                        case j<0:
                        b++;
                        break;
                }
        }
 
        trace('switch:'+(getTimer()-timeStart)+' milliseconds');
        trace('version: '+Capabilities.version);
}

Добавлено через 13 минут
Switch подходит для сравнения конкретных результатов, вкладывая в него '<' мы фактически создаем ещё одно под условие, отсюда такой плохой результат.

Писать его не сложно и он очень удобен для перебора заранее известных результатов. Получаются ясные и красивые конструкций.

Добавлено через 25 минут
Особенно стоит отметить возможность указания последовательных меток в switch:
Код AS3:

case 1:
case 2:
case 3:
// code
break;


alatar 13.09.2012 00:18

Делать тесты в дебаг плеере безсмысленно.

zuxul 13.09.2012 01:19

Заморачиваться насчет скорости выполнения конструкций "switch" и "if" бессмысленно.

Bgg 13.09.2012 01:48

Цитата:

Сообщение от zuxul (Сообщение 1095742)
Заморачиваться насчет скорости выполнения конструкций "switch" и "if" бессмысленно.

Ну почему, вдруг у автора несколько миллиардов свитчей/условных операторов. Может и поможет.

GBee 13.09.2012 02:01

В некоторых случаях можно вообще обойтись хеш-таблицей.

Vreden 13.09.2012 03:28

У меня switch тоже показывает худшие результаты по сравнению с if. Однако, разница не может быть почти в 6 раз, как у вас. У меня в этом же коде switch отстает от if на 25%, но не 600%, этого просто не может быть.

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

fljot 14.09.2012 03:41

http://jacksondunstan.com/articles/793
http://jacksondunstan.com/articles/1007

caseyryan 14.09.2012 09:45

странно, всегда думал, что в ас3 это должно быть как в других языках
http://stackoverflow.com/questions/7...an-switch-case

хотя возможно так и есть, просто все вышеприведенные тесты не достоверны.
Надо протестировать на большом количестве условий


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

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