powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Есть ли смысл оптимизировать такие строчки кода ?
25 сообщений из 50, страница 1 из 2
Есть ли смысл оптимизировать такие строчки кода ?
    #39743419
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой код:

Код: c#
1.
2.
3.
4.
5.
var sql = sb.ToString() + $@" SELECT F.Id, M.name                                
                            FROM F join M....                            
                            ORDER BY .. OFFSET ... ROWS FETCH NEXT ... ROWS ONLY;";
var cSql = sb.ToString() + @"Select count(*)
                                 FROM F;";



В StringBuilder формируется сложный текст запроса. На выходе нужно получить 2 текста отличающиеся только последними строчками.

Будет ли данное решение (с вызовом sb.ToString и последующей конкатенацией) достаточно быстрой ? Насколько двойной вызов sb.ToString ударит по производительности ? Есть ли смысл сохранить эту строку сначала во временную переменную и затем уже конкатенировать с последующими ?

В идеале мне бы хотелось, чтобы вся работа шла непосредственно в StringBuilder, но не придумал ничего лучше такого варианта:
Код: c#
1.
2.
3.
4.
5.
6.
sb.AppendLine(" %$ReplaceString$% ");
var temp = sb.ToString();

Regexp rg = ...
var sql = rg.replace ("%$ReplaceString$%", "select ...");
var сSql = rg.replace ("%$ReplaceString$%", "select ...");



Будет ли ускорение ? Сомневаюсь.

Какие еще варианты могут быть ?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743453
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что мешает зареплейсить прямо в StringBuilder'е? там это будет на много быстрее.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743485
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Мешает то, что мне нужно получить 2 результата а не один. После первого реплейса я затру "%$ReplaceString$%" в билдере, и как тогда получу второй результат, реплейсить ведь уже нечего будет. В этом и проблема. Или я ошибаюсь ?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743490
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Т.е. если в sb хранится строка "Hello %name%", после первого реплейса там будет "Hello Петя". Применить в этому sb снова реплейс не выйдет, строки подстановки уже не будет. В этом и отличие StringBuilder'a от regexp. Поэтому я и делаю ToString 2 раза.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743492
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если формирование этих строк идет в цикле с сотней тысяч итераций, то выглядит это странным.
А если это однократная операция в ответ на клик пользователя, то пофиг на пару миллисекунд, по сравнению с выборкой из БД - вообще ни о чем
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743497
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какой смысл оптимизировать, если запрос к БД все равно будет в стопиццот раз медленней любых манипуляций со строками.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743498
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Второй вариант.
Ну я понимаю, что одиночное выполнение не сильно критично. Просто стало интересно, как бы найти решение по лучше. Его нет ?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743499
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

Просто так (с). мультик такой есть, про котенка )
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743502
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дело не только оптимизации, но и в "говнокодности". Все эти "реплейсы" строк, это говнокод однозначный.
Если у вас формируется сложный запрос, формируйте его прямо в SB последовательно.
Заполняя строку слева направо непрерывно и без всяких реплейсов.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743508
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Roman Mejtes,

Так я это и делаю.

На выходе мне нужно получить 2 запроса. Запросы отличаются лишь последними строчками.
Первый это чистый Select со списком полей и пагинацией. А второй это Count(*) по всем сущностям попадающим в выборку. Я привел пример как это выглядит в коде.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743525
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А сервер БД не поддерживает Multiply Recordset?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743539
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Хм. А что это такое ?
Использую MS Sql - скорее всего последней версии или около того, не помню какая именно там версия.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743540
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Можете объяснить как это можно было бы использовать ? Интересно.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743550
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я предположил, что можно разом отправить на сервер 2 запроса, и от сервера сразу получить ответ
тогда вопросы "оптимальности" генерирования запросов должны потерять актуальность
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743555
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79я предположил, что можно разом отправить на сервер 2 запроса, и от сервера сразу получить ответ
тогда вопросы "оптимальности" генерирования запросов должны потерять актуальностьДа, тут выигрыш будет на порядок выше, чем при построении строки )
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743557
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

А вы про то, чтобы сразу в БД послать несколько запросов, и получить на каждый из них свой сет-ответ. Да, конечно такое есть. Но это уже другая оптимизация, которую мне стати тоже стоит провести.

Но сейчас вопрос про более раннюю стадию - как эффективно сформировать эти SQL запросы. Нужно получить 2 почти идентичных запроса, отличающихся только последней строчкой. Запросы формируются в StringBuilder'e и затем нужно придумать эффективное решение, как из полученного StringBuilder'а получить на выход 2 итоговые строки.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743564
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreА вы про то, чтобы сразу в БД послать несколько запросов, и получить на каждый из них свой сет-ответ
Это всего лишь вариант. Если второй запрос скалярный, возможно обойтись и выходным параметром


WaspNewCoreкак эффективно сформировать эти SQL запросы. Нужно получить 2 почти идентичных запроса, отличающихся только последней строчкой. Запросы формируются в StringBuilder'e и затем нужно придумать эффективное решение, как из полученного StringBuilder'а получить на выход 2 итоговые строки
Оптимально не использовать никакой StringBuilder вообще в этой задаче. От него есть польза, если в процессе редактирования требуется влезать внутрь сформированной строки, для вставки/редактирования. А если обычная конкатенация, то плюсы от него видны только при сотнях операций, чего при формировании запроса быть не должно. В вашем случае StringBuilder может и шустрее, но просто приведет к ненаглядности кода. А разница в скорости настолько ничтожна, что ей можно пренебречь
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743570
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Вы предлагаете отказаться от кучи
sb.AppendLine...
sb.AppendLine...
sb.AppendLine...

И заменить их на кучу конкатенации ? Нет уж. Как раз тут StringBuilder полезно использовать. У меня там запрос динамически формируется и текст выходит весьма большой.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743580
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, дело ваше. Зачем тогда спрашивать совета, если вы все решили?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743581
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо всё усложнять. Эта задача удобно решается через подстановки ($"{n}") и пофик на пару сотен микросекунд. Удобство сопровождения кода гораздо важнее.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743585
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

так в том и суть, что после первой подстановки мы теряем это ($"{n}") и получаем "Вася". Поэтому мне и приходится делать
Код: c#
1.
2.
sb.ToString() +"select name, id, ..."
sb.ToString() +"select count(*)"



Т.е. мне приходится сохранить исходную строку в двух экземплярах а потом к каждому конкатенатить различающиеся.

Поэтому то я и спрашиваю как сделать лучше. В этом и вопрос !
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743586
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCoreArm79,

Вы предлагаете отказаться от кучи
sb.AppendLine...
sb.AppendLine...
sb.AppendLine...

И заменить их на кучу конкатенации ? Нет уж. Как раз тут StringBuilder полезно использовать. У меня там запрос динамически формируется и текст выходит весьма большой.
Еще раз повторю что вам сказали.
Если append не тысячи раз, то красивее будет:
s += "select";
s += " where cccc" ;
Ну или первый builder выкинуть в s и потом склеить со вторым.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743588
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79Ну, дело ваше. Зачем тогда спрашивать совета, если вы все решили?

Ну как решил.
Я просто сделал так. но я спрашиваю - как лучше.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743591
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreShocker.Pro,

так в том и суть, что после первой подстановки мы теряем это ($"{n}") и получаем "Вася". Поэтому мне и приходится делать
Код: c#
1.
2.
sb.ToString() +"select name, id, ..."
sb.ToString() +"select count(*)"



Т.е. мне приходится сохранить исходную строку в двух экземплярах а потом к каждому конкатенатить различающиеся.

Поэтому то я и спрашиваю как сделать лучше. В этом и вопрос !

Блин, да напиши ты просто:

Код: c#
1.
2.
3.
var sql = sb.ToString();
sql +"select name, id, ..."
sql +"select count(*)"



и не парься.

У тебя вообще там что - в стрингбилдере запрос в гигабайт символов что ли, что ты так этим заморочился?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743603
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
fkthat,

Ну в общем об этом я и спросил.

Мне просто хочется понять как будет эффективней. Это не вопрос жизни и смерти и всего всего )
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Есть ли смысл оптимизировать такие строчки кода ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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