Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
1

Сильно ли нагружает switch

20.01.2019, 17:25. Показов 2951. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток, хотел спросить, если свитч это то же что и if - else
Это эквивалентно следующему примеру, в котором используется конструкция if - else.
Взял от сюда
Еще там прописано что:
Оператор switch может содержать любое количество разделов switch, а каждый раздел может иметь одну или несколько меток case (как показано в следующем примере). Однако две метки case не могут содержать одно и то же выражение.
Зная математику, на простом свитче можно реализовать такое мини-зациливания, имею ввиду что долго будет искать метку, т .е. есть меток около 500к, то вызов свитча будет сильно нагрузать систему?

Читал что 1 ГЦ - это 1 миллиард операций в секунду, выходит какой-то проц с 3.6 за секунду дойдет до последней метки свича состоящего из 3.6 миллиардов меток?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2019, 17:25
Ответы с готовыми решениями:

Сильно раздутый switch case
Ломаю голову над одной простой задачей. Как красивее и производительнее закодировать тип данных....

Создаётся ли копия при инициализации new Function() и как сильно она нагружает процессор и память ?
Всем привет ! собственно сабж , но для более точного понятия попробую описать от А до Я хотя у...

Программа сильно нагружает CPU
Здраствуйте. Создал программу, использовал WinAPI функции. Каждые 5 секунд программа получает...

Что-то сильно нагружает систему
Пользователь принес ноутбук, с просьбой решить его проблему. Проблема заключается в том что ноутбук...

8
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
20.01.2019, 17:42 2
Лучший ответ Сообщение было отмечено k0vpack как решение

Решение

Цитата Сообщение от k0vpack Посмотреть сообщение
, т .е. есть меток около 500к, то вызов свитча будет сильно нагрузать систему?
если программист написал 500к меток, свич далеко не самая большая проблема в проекте
Цитата Сообщение от k0vpack Посмотреть сообщение
Читал что 1 ГЦ - это 1 миллиард операций в секунду, выходит какой-то проц с 3.6 за секунду дойдет до последней метки свича состоящего из 3.6 миллиардов меток?
операции бывают разные. какие-то пару тактов требуют, другие десяток
Цитата Сообщение от k0vpack Посмотреть сообщение
если свитч это то же что и if - else
тогда было бы долго, но свитч генерирует jump-table если меток много и ищет за константу
1
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
20.01.2019, 17:51  [ТС] 3
Цитата Сообщение от КОП Посмотреть сообщение
тогда было бы долго, но свитч генерирует jump-table если меток много и ищет за константу
но в документации же пишет -
Это эквивалентно следующему примеру, в котором используется конструкция if - else.
0
Эксперт .NET
17790 / 12941 / 3381
Регистрация: 17.09.2011
Сообщений: 21,215
20.01.2019, 18:04 4
Лучший ответ Сообщение было отмечено k0vpack как решение

Решение

Цитата Сообщение от k0vpack Посмотреть сообщение
Сильно ли нагружает switch
По-разному бывает, т.к. конкретная реализация свитча зависит от типа проверямого значения и диапазона его значений.
В некоторых случаях возможны оптимизации, в целом компилятор генерирует один из нижеприведенных вариантов:
  • Безусловный переход
  • Словарь
  • Проверка через if/else

Цитата Сообщение от k0vpack Посмотреть сообщение
меток около 500к
Вы это на полном серьезе?
1
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
20.01.2019, 18:05 5
Цитата Сообщение от k0vpack Посмотреть сообщение
но в документации же пишет -
до 5 полей примерно свич разворачивается в ifelse. так что всё верно.
кроме того эквивалентно можно по разному трактовать. По смыслу одно и то же, по производительности нет
1
82 / 78 / 34
Регистрация: 13.02.2018
Сообщений: 1,347
20.01.2019, 18:06  [ТС] 6
Цитата Сообщение от kolorotur Посмотреть сообщение
Вы это на полном серьезе?
привел как пример.
0
Эксперт .NET
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
20.01.2019, 18:12 7
Цитата Сообщение от КОП Посмотреть сообщение
тогда было бы долго, но свитч генерирует jump-table если меток много и ищет за константу
Это не так, особенно если в switch используется pattern matching, который разворачивается в огромный if/else if/else...
0
1123 / 794 / 219
Регистрация: 15.08.2010
Сообщений: 2,185
20.01.2019, 18:17 8
Цитата Сообщение от Someone007 Посмотреть сообщение
особенно если в switch используется pattern matching
это я намеренно не оговорил, чтобы не усложнять. К тому же сам не смотрел еще, используются ли там какие либо оптимизации.
Цитата Сообщение от Someone007 Посмотреть сообщение
Это не так
кроме паттернов и им подобного есть исключения? или для остального верно?
0
Эксперт .NET
6507 / 4084 / 1605
Регистрация: 09.05.2015
Сообщений: 9,548
20.01.2019, 18:21 9
Цитата Сообщение от КОП Посмотреть сообщение
кроме паттернов и им подобного есть исключения? или для остального верно?
Еще видел как примерно такой код
C#
1
2
3
4
5
6
7
8
9
10
11
int x;
string str;
switch(str)
{
   case "1":
       x = 123;
       break;
   case "2":
       x = 456;
       break;
}
разворачивался в Dictionary<string, int>...
0
20.01.2019, 18:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2019, 18:21
Помогаю со студенческими работами здесь

Nod32 сильно нагружает процессор.
При записи диска(CD), Nod нагружает процессор, что можно отключить, что-бы он не нагружал компьютер?

консольное приложение сильно нагружает процессор
сделал консольную игру все бы ничего, но она сильно нагружает процессор. если переместить exe файл...

Непонятная программа сильно нагружает систему
Мою систему знатно нагружает steamwebhelper (если удалять, восстанавливается), так же в реестре...

Как сильно такая проверка нагружает сервер?
Нашел урок проверки имени в базе без перезагрузки всей страницы. Насколько сильно запуск php...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru