|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Что, сильно производительнее будет писать Код: c# 1. 2. 3. 4. 5. 6.
вместо Код: c# 1. 2. 3. 4. 5.
В первом случае ещё надо постоянно держать в голове, что такое оператор "bitwise OR" и как это связано с перечислениями. Ведь не все перечисления заданы удобно для применения "bitwise OR" (т. е. рядом 1, 2, 4, 8 и т. д.). Т. е. надо ещё и знать, а можно ли для этого перечисления применять "bitwise OR", поглядывая в исходный код этого перечисления. Вообще, откуда эта хрень пошла с "bitwise OR" в перечислениях? Программисты "старой закалки" повнедряли свои ненужные фичи из низкоуровневых языков? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 10:02 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Нет, вот реально... Я так понимаю, борьба идёт за читаемость-понимаемость и всё такое. За лямбды гоняют. А "bitwise OR" мало где применяется. И тут на тебе - всякую хрень с побитовыми операциями пишут, вместо простых и понятных широко применяемых выражений. Отцы-программисты совсем уже заигрались в богов и самодурство. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 10:04 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5.
Код: c# 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 10:08 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
НемоКэп42Нет, вот реально... Я так понимаю, борьба идёт за читаемость-понимаемость и всё такое. За лямбды гоняют. А "bitwise OR" мало где применяется. И тут на тебе - всякую хрень с побитовыми операциями пишут, вместо простых и понятных широко применяемых выражений. Отцы-программисты совсем уже заигрались в богов и самодурство. Какбэ мир не замыкается на .Net. Есть еще com-взаимодействия + WinAPI. Много где флаги применяются. НемоКэп42Ведь не все перечисления заданы удобно для применения "bitwise OR" (т. е. рядом 1, 2, 4, 8 и т. д.). Т. е. надо ещё и знать, а можно ли для этого перечисления применять "bitwise OR", поглядывая в исходный код этого перечисления. Исходный код не нужен. Enum для этого имеет атрибут Flags ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 10:48 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
НемоКэп42, первый способ производительнее и удобнее. Производительнее т.к. нет выделения памяти под массив. Удобнее потому что операция проверки установлен один бит или несколько всегда вылядит так if ((val & mask) == mask). Во втором случае будет нужен цикл что удлинит код. Флаги, как это называет .NET, нужны для редких ситуаций плотной упаковки значений на уровне битов и для взаимодействия с неуправляемым кодом. НемоКэп42В первом случае ещё надо постоянно держать в голове, что такое оператор "bitwise OR" и как это связано с перечислениями. Это всегда означает установку битов. Не важно enum или число. НемоКэп42едь не все перечисления заданы удобно для применения "bitwise OR" (т. е. рядом 1, 2, 4, 8 и т. д.). А какая тебя разница? Enum дает тебе возможность глядеть на это с точки зрения наличия/отсутствия именованных значений забыв про биты. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 10:48 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Код: c# 1.
Код: c# 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 12:04 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Убедили. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 19:30 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
НемоКэп42 Код: c# 1. 2. 3. 4. 5. 6.
either Код: c# 1. 2. 3. 4. 5.
не кажется что в крайнем с низу варианте небрежное обращение с памятью, даже если рассматривать не в контексте вопроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 19:51 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Где-то в степине кажется что в крайнем с низу варианте небрежное обращение с памятью, даже если рассматривать не в контексте вопроса? Угу. Добавляется неявный вызов new CooperativeLevel[]{ CooperativeLevel.Foreground, CooperativeLevel.Exclusive }, что разумеется хуже чем передача копии значения value-типа. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 21:09 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
bazile, конечно, вот по этому и стоит заменять при проектирования типа ( особенного обобщенного) перегрузкой метода по количеству параметров. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 21:19 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Где-то в степи, зачем обязательно заменять, когда можно дополнить вариантом без аргументов, если это допустимо, и несколькими вариантами с конкретными аргументами. Используем Console.WriteLine и String.Concat как пример. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 22:39 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
bazile, прав ( заменить убрать) - стоит использовать вместо param - ... |
|||
:
Нравится:
Не нравится:
|
|||
18.09.2014, 22:53 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Где-то в степиНемоКэп42 Код: c# 1. 2. 3. 4. 5. 6.
either Код: c# 1. 2. 3. 4. 5.
не кажется что в крайнем с низу варианте небрежное обращение с памятью, даже если рассматривать не в контексте вопроса? Когда в дотнете память считали, тем более, в таких мелочах? Ну много там памяти лишней уйдёт? Зато программировать удобнее не только бородатым зазнайкам из восьмидесятых-девяностых, но и тем, кому эти битовые операции по поводу и без не сдались. После использования Expression и лямбд (а кое-кто ещё и рефлексией раньше заморачивался) в INotifyPropertyChanged для передачи имени параметра (чтобы строкой не писать) я ваших аргументов не понимаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 06:47 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
НемоКэп42Когда в дотнете память считали, тем более, в таких мелочах? Если клепаешь формочки, то да. Если высоко-нагруженное серверное приложение, то нужно думать о памяти в том числе. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 10:40 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
ЕвгенийВЕсли высоко-нагруженное серверное приложение, то нужно думать о памяти в том числе. bazileДобавляется неявный вызов new CooperativeLevel[]{ CooperativeLevel.Foreground, CooperativeLevel.Exclusive }, что разумеется хуже чем передача копии значения value-типа. Хуже, но незначительно. На высоконагруженное серверное приложение это практически не повлияет. Тем не менее, вариант с флагами все равно ИМХО удобнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 11:07 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Arm79ЕвгенийВЕсли высоко-нагруженное серверное приложение, то нужно думать о памяти в том числе. bazileДобавляется неявный вызов new CooperativeLevel[]{ CooperativeLevel.Foreground, CooperativeLevel.Exclusive }, что разумеется хуже чем передача копии значения value-типа. Хуже, но незначительно. На высоконагруженное серверное приложение это практически не повлияет. Тем не менее, вариант с флагами все равно ИМХО удобнее. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
У меня такой результат. 90942 1639851 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 11:44 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
ЕвгенийВУ меня такой результат. 90942 1639851 И что это показало? Что на 100 миллионах итераций разница составила 160 тысяч тиков? Это безусловно фантастическая нагрузка и глобальное проседание производительности. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:00 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Arm79160 тысяч тиков? Прошу прощения, 1,6 млн. Но сути предыдущего комментария это не изменило. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:00 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Результаты вашего кода у меня на компьютере в мс: 6153 6568 Итого на 100 млн операций разница составила 400 мс. Или, на один вызов задержка составила 0.004 мкс (4 наносекунды, если я правильно посчитал). Считаю, что это допустимая задержка. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:07 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Arm79Результаты вашего кода у меня на компьютере в мс: 6153 6568 Итого на 100 млн операций разница составила 400 мс. Или, на один вызов задержка составила 0.004 мкс (4 наносекунды, если я правильно посчитал). Считаю, что это допустимая задержка. А если скомпилировать в Release и запустить вне студии? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:12 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
ЕвгенийВArm79Результаты вашего кода у меня на компьютере в мс: 6153 6568 Итого на 100 млн операций разница составила 400 мс. Или, на один вызов задержка составила 0.004 мкс (4 наносекунды, если я правильно посчитал). Считаю, что это допустимая задержка. А если скомпилировать в Release и запустить вне студии? Там еще интереснее (мс на 100 млн операций): 28 596 Затратно на несколько порядков, но в абсолютном выражении ничтожно ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:17 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Arm79, А так? Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
А если ему (GC) нужно перелопачивать еще десятки миллионов объектов из 0 поколения? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:35 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
все в мс, тики в топку из студии: Код: plaintext 1. 2. 3. 4.
извне: Код: plaintext 1. 2. 3. 4. 5.
ЕвгенийВА если ему (GC) нужно перелопачивать еще десятки миллионов объектов из 0 поколения? GC заточен на то, чтобы обрабатывать кучу мелких ненужных объектов, они все вылетают на первом же поколении. А еще нужно юзать серверный GC ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:43 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
Arm79, Заточен то он заточен, но из-за такой лабуды многие короткоживущие объекты уедут в первое поколение, а то и во второе, что не есть гуд. Поимеем проблему на ровном месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 12:49 |
|
Бинарные операторы в перечислениях - зачем?
|
|||
---|---|---|---|
#18+
НемоКэп42, НемоКэп42Когда в дотнете память считали, тем более, в таких мелочах? Ну много там памяти лишней уйдёт? Зато программировать удобнее не только бородатым зазнайкам из восьмидесятых-девяностых, но и тем, кому эти битовые операции по поводу и без не сдались. Но это Ваше личное мнение, писать то Вы будете как старший скажет.. Don't worry, be happy ... |
|||
:
Нравится:
Не нравится:
|
|||
19.09.2014, 18:07 |
|
|
start [/forum/topic.php?fid=20&msg=38751384&tid=1402458]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 331ms |
total: | 474ms |
0 / 0 |