|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Есть такой код: Код: c# 1. 2. 3. 4. 5.
В StringBuilder формируется сложный текст запроса. На выходе нужно получить 2 текста отличающиеся только последними строчками. Будет ли данное решение (с вызовом sb.ToString и последующей конкатенацией) достаточно быстрой ? Насколько двойной вызов sb.ToString ударит по производительности ? Есть ли смысл сохранить эту строку сначала во временную переменную и затем уже конкатенировать с последующими ? В идеале мне бы хотелось, чтобы вся работа шла непосредственно в StringBuilder, но не придумал ничего лучше такого варианта: Код: c# 1. 2. 3. 4. 5. 6.
Будет ли ускорение ? Сомневаюсь. Какие еще варианты могут быть ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 12:57 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
что мешает зареплейсить прямо в StringBuilder'е? там это будет на много быстрее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 13:34 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Roman Mejtes, Мешает то, что мне нужно получить 2 результата а не один. После первого реплейса я затру "%$ReplaceString$%" в билдере, и как тогда получу второй результат, реплейсить ведь уже нечего будет. В этом и проблема. Или я ошибаюсь ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:00 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Т.е. если в sb хранится строка "Hello %name%", после первого реплейса там будет "Hello Петя". Применить в этому sb снова реплейс не выйдет, строки подстановки уже не будет. В этом и отличие StringBuilder'a от regexp. Поэтому я и делаю ToString 2 раза. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:03 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Если формирование этих строк идет в цикле с сотней тысяч итераций, то выглядит это странным. А если это однократная операция в ответ на клик пользователя, то пофиг на пару миллисекунд, по сравнению с выборкой из БД - вообще ни о чем ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:05 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Какой смысл оптимизировать, если запрос к БД все равно будет в стопиццот раз медленней любых манипуляций со строками. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:08 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Shocker.Pro, Второй вариант. Ну я понимаю, что одиночное выполнение не сильно критично. Просто стало интересно, как бы найти решение по лучше. Его нет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:08 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
fkthat, Просто так (с). мультик такой есть, про котенка ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:08 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
дело не только оптимизации, но и в "говнокодности". Все эти "реплейсы" строк, это говнокод однозначный. Если у вас формируется сложный запрос, формируйте его прямо в SB последовательно. Заполняя строку слева направо непрерывно и без всяких реплейсов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:14 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Roman Mejtes, Так я это и делаю. На выходе мне нужно получить 2 запроса. Запросы отличаются лишь последними строчками. Первый это чистый Select со списком полей и пагинацией. А второй это Count(*) по всем сущностям попадающим в выборку. Я привел пример как это выглядит в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:17 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
А сервер БД не поддерживает Multiply Recordset? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:44 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, Хм. А что это такое ? Использую MS Sql - скорее всего последней версии или около того, не помню какая именно там версия. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:55 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, Можете объяснить как это можно было бы использовать ? Интересно. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 14:55 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
я предположил, что можно разом отправить на сервер 2 запроса, и от сервера сразу получить ответ тогда вопросы "оптимальности" генерирования запросов должны потерять актуальность ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:02 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79я предположил, что можно разом отправить на сервер 2 запроса, и от сервера сразу получить ответ тогда вопросы "оптимальности" генерирования запросов должны потерять актуальностьДа, тут выигрыш будет на порядок выше, чем при построении строки ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:04 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, А вы про то, чтобы сразу в БД послать несколько запросов, и получить на каждый из них свой сет-ответ. Да, конечно такое есть. Но это уже другая оптимизация, которую мне стати тоже стоит провести. Но сейчас вопрос про более раннюю стадию - как эффективно сформировать эти SQL запросы. Нужно получить 2 почти идентичных запроса, отличающихся только последней строчкой. Запросы формируются в StringBuilder'e и затем нужно придумать эффективное решение, как из полученного StringBuilder'а получить на выход 2 итоговые строки. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:06 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreА вы про то, чтобы сразу в БД послать несколько запросов, и получить на каждый из них свой сет-ответ Это всего лишь вариант. Если второй запрос скалярный, возможно обойтись и выходным параметром WaspNewCoreкак эффективно сформировать эти SQL запросы. Нужно получить 2 почти идентичных запроса, отличающихся только последней строчкой. Запросы формируются в StringBuilder'e и затем нужно придумать эффективное решение, как из полученного StringBuilder'а получить на выход 2 итоговые строки Оптимально не использовать никакой StringBuilder вообще в этой задаче. От него есть польза, если в процессе редактирования требуется влезать внутрь сформированной строки, для вставки/редактирования. А если обычная конкатенация, то плюсы от него видны только при сотнях операций, чего при формировании запроса быть не должно. В вашем случае StringBuilder может и шустрее, но просто приведет к ненаглядности кода. А разница в скорости настолько ничтожна, что ей можно пренебречь ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:13 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, Вы предлагаете отказаться от кучи sb.AppendLine... sb.AppendLine... sb.AppendLine... И заменить их на кучу конкатенации ? Нет уж. Как раз тут StringBuilder полезно использовать. У меня там запрос динамически формируется и текст выходит весьма большой. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:17 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Ну, дело ваше. Зачем тогда спрашивать совета, если вы все решили? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:22 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Не надо всё усложнять. Эта задача удобно решается через подстановки ($"{n}") и пофик на пару сотен микросекунд. Удобство сопровождения кода гораздо важнее. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:25 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Shocker.Pro, так в том и суть, что после первой подстановки мы теряем это ($"{n}") и получаем "Вася". Поэтому мне и приходится делать Код: c# 1. 2.
Т.е. мне приходится сохранить исходную строку в двух экземплярах а потом к каждому конкатенатить различающиеся. Поэтому то я и спрашиваю как сделать лучше. В этом и вопрос ! ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:28 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreArm79, Вы предлагаете отказаться от кучи sb.AppendLine... sb.AppendLine... sb.AppendLine... И заменить их на кучу конкатенации ? Нет уж. Как раз тут StringBuilder полезно использовать. У меня там запрос динамически формируется и текст выходит весьма большой. Еще раз повторю что вам сказали. Если append не тысячи раз, то красивее будет: s += "select"; s += " where cccc" ; Ну или первый builder выкинуть в s и потом склеить со вторым. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:29 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79Ну, дело ваше. Зачем тогда спрашивать совета, если вы все решили? Ну как решил. Я просто сделал так. но я спрашиваю - как лучше. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:29 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreShocker.Pro, так в том и суть, что после первой подстановки мы теряем это ($"{n}") и получаем "Вася". Поэтому мне и приходится делать Код: c# 1. 2.
Т.е. мне приходится сохранить исходную строку в двух экземплярах а потом к каждому конкатенатить различающиеся. Поэтому то я и спрашиваю как сделать лучше. В этом и вопрос ! Блин, да напиши ты просто: Код: c# 1. 2. 3.
и не парься. У тебя вообще там что - в стрингбилдере запрос в гигабайт символов что ли, что ты так этим заморочился? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:33 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
fkthat, Ну в общем об этом я и спросил. Мне просто хочется понять как будет эффективней. Это не вопрос жизни и смерти и всего всего ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:42 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCore, Голосуем))). Подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:48 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WebPrj, Да, я и сам думаю, что сохранение в переменную и последующую конкатенацию с ней, будет быстрее. Но я хотел бы найти вообще более эффективное решение. Вот если бы можно было объединить функционал StringBuilder'а и regexp'а. Чтобы можно было зареплейсить но не терять исходную строку. Но такого нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 15:54 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCore, regex не меняет исходную строку Как раз если вы несколько раз делаете StringBuilder.ToString() - потеряете значительно в скорости Проще сделать один string. А потом к нему применять откомпилированный regex.replace и на выходе получить две измененные строки Это на случай, если у вас по каким-то причинам неприятие нормальных параметров запросов. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:04 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCore, эффективное Рациональное https://www.google.ru/search?newwindow=1&client=tablet-android-huawei&q=рациональное решение проблем&ved=2ahUKEwjeqJn_oIvfAhVeAhAIHYS9BFgQsKwBKAN6BAgAEAU&biw=962&bih=601 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:05 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, я не имею ничего против параметров запросов, я их использую. Но с их помощью вы не замените Select F1,F2 на Select Count(*) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:07 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
А что должен сделать второй запрос? Вывести количество строк из первого запроса? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:09 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79, Первый запрос получает пагинированную информацию через "ORDER BY .. OFFSET ... ROWS FETCH NEXT ... ROWS ONLY;" А второй запрос должен вернуть число всех, кто попадает под условие. ну стандартная задача - верни мне первых 50, и покажи сколько там всего попадают в выборку. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:18 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
сделай 1 запрос с дополнительным выходным параметром @out_param и исполни его select f1, f2 from where order by offset ; set @out_param = select count(*) чего то там ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:21 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreи всего всего Ну это-то как раз просто. "42". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:23 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Arm79сделай 1 запрос с дополнительным выходным параметром @out_param и исполни его select f1, f2 from where order by offset ; set @out_param = select count(*) чего то там вы все верно говорите. Но этот запрос же генериться динамически через StringBuilder. Мн и нужно получить, по сути, такой же запрос. То. что они они у вас объединены в один запрос а у меня двумя не суть. Суть в том, чтобы нагенерить сложный запрос в SB ("AAAAA"). А потом без личшей генерации строк сформировать из него 2 запроса: "AAAA_B" и "AAAA_C". Вот сейчас я через SB генерю это "АААА". А итоговые строки получаю так: sb.AppendLine ("AAAA"); var sql = sb.ToString() + "_B"; var cSql = sb.ToString() + "_C"; Я хотел бы найти решение без двойного вызова sb.ToString() . Вы написали то, что я должен получить. Но мой вопрос как это получить эффективно ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:29 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
fkthat, ага. кто-то таки заметил пасхальное яйцо ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:30 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
По моему, уже не один раз вам сказали, и не один человек - конкатенация в одну строку (без StringBuilder) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:40 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreЯ хотел бы найти решение без двойного вызова sb.ToString() Вызвать 1 раз, результат сохранить в промежуточную переменную, её конкатенировать с остальным хозяйством. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:43 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
ну общем я понял, что решения крутятся по одним и тем же двум вариантам. ок. просто думал, может можно что-то эффективное сделать. ладно тогда. можем закрывать. если только не появится какое-то гениальное решение ) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 16:47 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreгениальное решение )есть. Не пиши отчётники руками. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 17:00 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreБудет ли ускорение ? Сомневаюсь. Даже если будет, то ты его не заметишь, потому что время выполнения запроса на несколько порядков дольше. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.12.2018, 20:03 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
опять срач про ОРМ vs SQL. не интересно ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 23:46 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
love_bachопять срач про ОРМ vs SQL. не интересно ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH весь топик не читал, тут был пример запроса, который генерировал ОРМ? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 23:48 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
love_bachlove_bachопять срач про ОРМ vs SQL. не интересно ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH весь топик не читал, тут был пример запроса, который генерировал ОРМ? на языке ОРМ и SQL ... |
|||
:
Нравится:
Не нравится:
|
|||
07.12.2018, 23:49 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
love_bachопять срач про ОРМ vs SQL. не интересносрач скорее о генераторах отчётов ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2018, 00:01 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
Изопропилlove_bachопять срач про ОРМ vs SQL. не интересносрач скорее о генераторах отчётов врядли ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2018, 00:06 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
love_bach, В отчетнике, ты берешь, строишь портянку SQL в IDE СУБД. Потом копипаст текст SQL А4 в сам отчетник. Готово. А тут он строит запрос длинной А4 классами и переменными. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2018, 10:25 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
WaspNewCoreВ StringBuilder формируется сложный текст запроса. На выходе нужно получить 2 текста отличающиеся только последними строчками. нельзя 2 последние строчки текста приделывать отдельно от постоянной составляющей? зачем эти гидропляски? ... |
|||
:
Нравится:
Не нравится:
|
|||
10.12.2018, 18:36 |
|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#18+
love_bachlove_bachопять срач про ОРМ vs SQL. не интересно ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH весь топик не читал, тут был пример запроса, который генерировал ОРМ? Не читал, но обсуждаю. :) В данном топике нет ни слова про ОРМ и тем более его "vs" SQL. Тут о другом - о сборщике мусора и попытках минимизировать нагрузку на память. Это если кратко описать весь топик, чтобы его не нужно было читать :) PS. Про ORM vs SQL я ругаюсь параллельно тут 21755813 . И очень очень жду ответа от практикующих. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.12.2018, 16:31 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1399131]: |
0ms |
get settings: |
12ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
64ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
73ms |
get tp. blocked users: |
2ms |
others: | 283ms |
total: | 469ms |
0 / 0 |