11 / 11 / 4
Регистрация: 14.09.2009
Сообщений: 134
|
||||||
if или switch? что быстрее17.08.2011, 11:59. Показов 36402. Ответов 27
Метки нет Все метки)
(
Здравствуйте.
Подскажите пожалуйста,что быстрее будет выполняться много условий if ,или switch
Заранее спасибо
0
|
17.08.2011, 11:59 | |
Ответы с готовыми решениями:
27
Оптимизация кода, структуры базы, или что еще можно сделать что бы быстрее работало!? Что быстрее - метод или свойство? Что быстрее умножение или деление? |
![]() 49 / 49 / 4
Регистрация: 31.01.2011
Сообщений: 156
|
|
17.08.2011, 13:04 | |
Не думаю, что замена конструкций языка даст хоть какую-то выгоду в производительности.. Смотри в сторону поиска наиболее эффективных алгоритмов (для конкретной задачи) и оптимизации найденых/разработанных (Подходящая книга - "Алгоритмы. Построение и анализ" Кормен)
1
|
12 / 12 / 2
Регистрация: 04.08.2011
Сообщений: 57
|
|||||||||||
17.08.2011, 22:51 | |||||||||||
Ну не знаю, если вместо этого:
0
|
![]() |
|
18.08.2011, 03:26 | |
![]() Решение
Конструкция if-elseif-else выполняет последовательный перебор. Комбинаторная сложность соответсвенно n.
Конструкция switch позволяет проводить бинарный поиск. Комбинаторная сложность - log2(n) + 1 + небольшие затраты на кэширование искомой величины. Соответственно если вам нужно рассмотреть всего 2-3 варианта - то предпочтительнее использовать if. А вот если более 4х - то switch будет работать быстрее.
5
|
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
|
||||||
18.08.2011, 23:29 | ||||||
Для того что бы реально убедиться кто быстрее предлагаю запустить следующие прогу сначала с switch , а потом с if . Путем исключения из программы участка кода с помощью комментариев .Где триста миллионов итераций с "switch" и "if"
Свойство Environment.TickCount засекает время до работы программы и после ,выводя разницу .Аналогично можно подсчитывает время выполнения любых операций ![]()
2
|
мастер топоров
![]() 917 / 742 / 101
Регистрация: 16.08.2009
Сообщений: 1,476
|
|
19.08.2011, 01:13 | |
Vitall, не вариант ибо перебора не 300000000, а только 3. вот если бы вы написали 300000000 условий или столько же switch - тогда можно было бы проверять, а так надеяться на накопление какой-то погрешности не стоит, она может возникнуть сама собой
0
|
774 / 554 / 80
Регистрация: 03.07.2011
Сообщений: 1,020
|
||||||
19.08.2011, 01:58 | ||||||
Увеличить кол-во условий кейсов до 9 .Что уже выдает неоспоримое преимущество switch c результатом : switch - 1172 milliseconds, if - 4171 milliseconds .К тому же если погрешности на стороне switch это уже аргумент .В такой ситуации у if есть небольшое преимущество использования continue после успешного срабатывания if что избавляет от необходимости проверять условия дальше , хотя даже если If=1; if (If == 1) {a = a + 1; continue;}их результаты примерно одинаковы .
![]()
4
|
9 / 9 / 2
Регистрация: 05.08.2011
Сообщений: 18
|
|
19.08.2011, 03:22 | |
Vitall, в коде со switch после первого выполнения условия, дальше не производится действий. При использовании if без else, каждый следующий if проверяется, т.е. этот код делает не одно и тоже. Но даже если вы напишите эквивалентный код, всегда будет существовать погрешность при сравнении скорости выполнения команд (из-за работы других программ, особенностей вызова той или иной функции и кучи других факторов, о которых даже не стоит задумываться). На mnds где-то писали, что подобные тесты никогда не дают верный результат. Плюс ко всему, когда if много, то с кучей else они выглядят менее компактно, чем switch, не говоря уже о том, что вы сами можете запутаться. В итоге применять их нужно, когда они более удобны и не забивать себе голову о том, кто из них быстрее. Dejust верно сказал, главное продумать алгоритм программы, это даст намного большую оптимизацию.
1
|
![]() 167 / 96 / 23
Регистрация: 13.03.2011
Сообщений: 402
|
|
21.08.2011, 00:40 | |
Дело как раз в конкретных случаях. Если есть необходимость в очень-очень быстром исполнении кода,
(например в логических играх с анализом дерева игры, которое растёт очень быстро), все стандартные библиотеки ни куда не годятся - надо делать свои структуры и обработчики под них - только тогда можно достичь приемлевого результата.
1
|
11.09.2022, 01:54 | |
Если верить этой инструкции https://docs.microsoft.com/en-... sm4---asm- то
switch будет быстрее т.к. его назначение вызвать тот блок номер которого указан в switch, перебора не происходит. Оператор уже знает через сколько байт нужно перепрыгнуть чтобы вызывать нужный уровень, об этом написано по ссылке которую я дал. Но если условий очень мало например 2 или 4 то лучше использовать if, а если много и речь идёт о вызове уровня то switch будет быстрее. В инструкции указано что switch может использовать только целые числа.Добавлено через 5 минут Оператор switch уже на стадии компиляции знает где какой блок находится и в реалтайм вызовет нужный блок, конечно это медленнее чем массив но быстрее чем if.
0
|
Модератор
![]() ![]() |
|
11.09.2022, 02:36 | |
При маленьком количестве условий вы вряд ли сможете получить между ними разницу существенную для ПРАКТИЧЕСКОГО приложения.
А большое количество условий вряд ли будете писать "ручками" в коде. В тех случаях когда стоит задача ультра оптимизации какого-то алгоритма для конкретной платформы, то лучше не "последние капли" из Шарпа выжимать, а создать наитивную библиотеку на плюсах и использовать её методы. Всё таки задача Шарпа это не соревнование в быстродействии, а попытка создания платформонезависимого кода исполняемого CLR. А универсальность уже требует каких-то жертв по оптимизации других параметров.
1
|
11.09.2022, 05:09 | |
0
|
Администратор
![]() ![]() |
|
11.09.2022, 09:40 | |
0
|
3565 / 2506 / 1174
Регистрация: 14.08.2016
Сообщений: 8,216
|
|
11.09.2022, 15:02 | |
в продолжение некропостинга: быстрее будет словарь
0
|
11.09.2022, 15:02 | ||||||
Помогаю со студенческими работами здесь
20
Что быстрее Цикл или коллекция Поиск элемента в массиве или ключа в хеше - что быстрее Что будет быстрее и рентабельние использовать XML или Sqlite? Обращение через индекс Dictionary или IndexOf, что быстрее / производительнее? Что лучше: switch или elseif? Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Работа с объемным DOM в javascript
Htext 04.04.2025
Сегодня прочитал статью тут о расходах памяти в JS, ее утечках и т. п. И вот что вспомнил из своей недавней практики. Может, кому пригодится. Хотя, в той статье об этом тоже есть.
Дело в том, что я. . .
|
Оптимизация производительности Node.js с помощью кластеризации
run.dev 04.04.2025
Масштабирование приложений для обработки тысяч и миллионов запросов — обыденная задача для многих команд. Node. js, благодаря своей асинхронной событийно-ориентированной архитектуре, стал популярной. . .
|
Управление зависимостями в Python с Poetry
py-thonny 04.04.2025
Стандартный инструмент для установки пакетов в Python - pip - прекрасно справляется с базовыми сценариями: установил пакет командой pip install и используешь его. Но что произойдёт, когда разные. . .
|
Мониторинг с Prometheus в PHP
Jason-Webb 04.04.2025
Prometheus выделяется среди других систем мониторинга своим подходом к сбору и хранению метрик. В отличие от New Relic, который использует агентный подход и отправляет данные во внешнее хранилище,. . .
|
Пакет Context в Golang: Управление потоками и ресурсами
golander 04.04.2025
Работа с горутинами в Go часто напоминает управление непослушными детьми - они разбегаются кто куда, делают что хотят и не всегда завершаются вовремя. К счастью, в Go 1. 7 появился пакет context,. . .
|
Контейнеризация React приложений с Docker
Reangularity 03.04.2025
Контейнеризация позволяет упаковать приложение со всеми его зависимостями в автономный контейнер, который можно запустить на любой платформе с установленным Docker. Это существенно упрощает процессы. . .
|
Свой попап в SwiftUI
mobDevWorks 03.04.2025
SwiftUI, как декларативный фреймворк от Apple, предоставляет множество инструментов для создания пользовательских интерфейсов. В нашем распоряжении есть такие API как alerts, popovers, action sheets. . .
|
Антипаттерны микросервисной архитектуры
ArchitectMsa 03.04.2025
Хорошо спроектированная микросервисная система может выдержать испытание временем, оставаясь гибкой, масштабируемой и устойчивой к большинству проблем. Такая архитектура обладает высоким уровнем. . .
|
std::mutex в C++: Советы и примеры использования
bytestream 03.04.2025
std::mutex - это механизм взаимного исключения, который гарантирует, что критический участок кода выполняется только одним потоком в каждый момент времени. Это простое, но могущественное средство. . .
|
Не удержался от оценки концепции двигателя Стирлинга.
Hrethgir 03.04.2025
Сколько не пытался - она выдавала правильные схемы, причём случайно рисовала горячие области в середине, холодные по краям, трубки с краёв в низ и магнит в соединяющей, но при этой выдавала описание. . .
|