Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Поиск рулит! Сообщения за день Все разделы прочитаны
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.09.2012, 21:47
Isfet вне форума Посмотреть профиль Отправить личное сообщение для Isfet Найти все сообщения от Isfet
  № 1  
Ответить с цитированием
Isfet

Регистрация: Mar 2012
Адрес: г.Новосибирск
Сообщений: 381
По умолчанию Что быстрее работает Switch или If операторы

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

Старый 12.09.2012, 22:00
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Свич быстрее, хоть и не значительно. Но писать его сложнее, в смысле набора текста, и выглядит эта конструкци, на мой взгляд, уродливее.
Плюс если условия не большие и их не много, особой разницы нет.

Старый 12.09.2012, 22:28
Tails вне форума Посмотреть профиль Отправить личное сообщение для Tails Найти все сообщения от Tails
  № 3  
Ответить с цитированием
Tails
 
Аватар для Tails

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,259
Записей в блоге: 6
Собственно, тесты:

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;
__________________
Дети не должны знать о своих родителях

Старый 13.09.2012, 00:18
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 4  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Делать тесты в дебаг плеере безсмысленно.
__________________
משיח לא בא
משיח גם לא מטלפן

Старый 13.09.2012, 01:19
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 5  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Заморачиваться насчет скорости выполнения конструкций "switch" и "if" бессмысленно.


Последний раз редактировалось zuxul; 13.09.2012 в 01:21. Причина: орфографическа ошибка
Старый 13.09.2012, 01:48
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 6  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от zuxul Посмотреть сообщение
Заморачиваться насчет скорости выполнения конструкций "switch" и "if" бессмысленно.
Ну почему, вдруг у автора несколько миллиардов свитчей/условных операторов. Может и поможет.

Старый 13.09.2012, 02:01
GBee вне форума Посмотреть профиль Отправить личное сообщение для GBee Найти все сообщения от GBee
  № 7  
Ответить с цитированием
GBee
 
Аватар для GBee

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
В некоторых случаях можно вообще обойтись хеш-таблицей.
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 13.09.2012, 03:28
Vreden вне форума Посмотреть профиль Отправить личное сообщение для Vreden Найти все сообщения от Vreden
  № 8  
Ответить с цитированием
Vreden
 
Аватар для Vreden

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

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

Старый 14.09.2012, 03:41
fljot вне форума Посмотреть профиль Отправить личное сообщение для fljot Найти все сообщения от fljot
  № 9  
Ответить с цитированием
fljot

блогер
Регистрация: Jul 2007
Сообщений: 940
Записей в блоге: 3
http://jacksondunstan.com/articles/793
http://jacksondunstan.com/articles/1007

Старый 14.09.2012, 09:45
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 10  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
странно, всегда думал, что в ас3 это должно быть как в других языках
http://stackoverflow.com/questions/7...an-switch-case

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 19:07.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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