powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / c#: Что производительнее - много OR или массив с Contains?
10 сообщений из 10, страница 1 из 1
c#: Что производительнее - много OR или массив с Contains?
    #39377131
mrArray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сразу пример

Код: plaintext
1.
  bool Result = a == 1 || a == 2 || a == 3|| .... || a == 200; 



или

Код: plaintext
1.
  bool Result = new int[] { 1, 2, 3, ..., 200}.Contains(a); 



С учётом высокой нагруженности (сайт).

Что произволительнее в данном случае или, может быть, лучше спросить, что "хуже"?
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377139
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArray,

Лучше так
Код: plaintext
1.
a >= 1 && a <=200



А вообще условие конечно быстрее, т.к. там нет выделения памяти а кол. сравнений то же самое.
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377143
mrArray
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Anatoly MoskovskymrArray,

Лучше так
[src cpp]
a >= 1 && a <=200

хаха.
Так то пример синтетический, реальные значения разные :)

Про выделение памяти тоже подумал.

Может есть ещё какое-то мнение на этот счет? (just in case)
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377161
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArrayСразу пример

Код: plaintext
1.
  bool Result = a == 1 || a == 2 || a == 3|| .... || a == 200; 



или

Код: plaintext
1.
  bool Result = new int[] { 1, 2, 3, ..., 200}.Contains(a); 



С учётом высокой нагруженности (сайт).

Что произволительнее в данном случае или, может быть, лучше спросить, что "хуже"?


Пофигу. Ты разницу не заметишь. Особенно на сайте.
Это наносекунды, а сайт работает в масштабе десятков милисекунд.
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377162
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArrayПро выделение памяти тоже подумал.


Ну, память-то можно и не выделять, можно поумнее написать.
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377309
Фотография SashaMercury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArrayAnatoly MoskovskymrArray,

Лучше так
[src cpp]
a >= 1 && a <=200

хаха.
Так то пример синтетический, реальные значения разные :)

Про выделение памяти тоже подумал.

Может есть ещё какое-то мнение на этот счет? (just in case)

Насколько разные? Упорядочены или нет? Если упорядочены, воспользуйтесь бинарным поиском
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377333
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArrayСразу пример

Код: plaintext
1.
  bool Result = a == 1 || a == 2 || a == 3|| .... || a == 200; 



или

Код: plaintext
1.
  bool Result = new int[] { 1, 2, 3, ..., 200}.Contains(a); 



С учётом высокой нагруженности (сайт).

Что произволительнее в данном случае или, может быть, лучше спросить, что "хуже"?
Одинаково. Их теоретическая произволительность строго одного одного порядка.
Для входного потока размера n с равномерным распределением значений и числа сравнений m среднее число сравнений (время последовательной работы) будет порядка (n*m/2) .

Практическая (коэффициент при произведении) зависит как от мозгов компилятора, так и особенностей платформы.
То что вчера, скомпилированное компилятором версии nml работало быстрее на железке xyz,
завтра может оказаться медленнее на железке xyw, будучи сделанным компилятором версии nmk и наоборот.
Кроме того, произволительность обоих становится не интересной, если а) n "достаточно большое" и б) есть возможность свести ситуацию по общему числу сравнений до n*log(m) или n

Если константы 1, ..., 200 известны на этапе компиляции, то сделать это можно для обоих вариантов - используя switch/goto или двоичный/интерполяционный поиск в массиве.
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377584
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SashaMercurymrArrayпропущено...

хаха.
Так то пример синтетический, реальные значения разные :)

Про выделение памяти тоже подумал.

Может есть ещё какое-то мнение на этот счет? (just in case)

Насколько разные? Упорядочены или нет? Если упорядочены, воспользуйтесь бинарным поиском

Если там массив в 100-200 элементов, то может и не особо нужно.
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39377644
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mrArray
Код: plaintext
1.
  bool Result = a == 1 || a == 2 || a == 3|| .... || a == 200; 


Сколько тут операций зависит от того чему равно a.
Например при a = 2 будет выполнено только a == 1 || a == 2, остальная часть условия не будет проверяться.

mrArray
Код: plaintext
1.
  bool Result = new int[] { 1, 2, 3, ..., 200}.Contains(a); 


если массив постоянный, то лучше его отсортировать один раз и заменить Contains() на Array.BinarySearch() ИМХУ с BinarySearch() будет чуть быстрее первого варианта.

Можно биткарту сделать, если диапазон значений небольшой, 8 значений на байт, например 0...10000 займет 1250 байт.
Заполняешь BitArray() проверка так
Код: c#
1.
  bool Result = my_arr[a];


это быстрее всего будет работать, но при большом диапазоне будет много памяти занимать. Если диапазон меньше 6400, то память даже сэкономишь по сравнению с массивом int[200].
...
Рейтинг: 0 / 0
c#: Что производительнее - много OR или массив с Contains?
    #39378015
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При определённом размере массива быстрее всего будет HashSet<T>, но и обычная
цепочка OR тоже имеет свои преимущества. Она проста и не генерит никакого
dependency-кода. Тоесть лаконична.

А для сложных структур данных нужно доказывать их потокобезопасность и реакцию
на неблагоприятные наборы данных (например известная атака на хешфункцию).
И не забыть их инстанциировать 1 раз а не на каждый "чих".
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / c#: Что производительнее - много OR или массив с Contains?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]