|
Есть ли смысл оптимизировать такие строчки кода ?
|
|||
---|---|---|---|
#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 |
|
|
start [/forum/topic.php?fid=20&fpage=25&tid=1399131]: |
0ms |
get settings: |
6ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
others: | 268ms |
total: | 421ms |
0 / 0 |