powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Есть ли смысл оптимизировать такие строчки кода ?
50 сообщений из 50, показаны все 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
Есть ли смысл оптимизировать такие строчки кода ?
    #39743606
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCore,
Голосуем))). Подходит?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743614
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WebPrj,

Да, я и сам думаю, что сохранение в переменную и последующую конкатенацию с ней, будет быстрее. Но я хотел бы найти вообще более эффективное решение. Вот если бы можно было объединить функционал StringBuilder'а и regexp'а. Чтобы можно было зареплейсить но не терять исходную строку. Но такого нет.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743635
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCore,

regex не меняет исходную строку
Как раз если вы несколько раз делаете StringBuilder.ToString() - потеряете значительно в скорости

Проще сделать один string. А потом к нему применять откомпилированный regex.replace и на выходе получить две измененные строки

Это на случай, если у вас по каким-то причинам неприятие нормальных параметров запросов.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743638
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743640
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

я не имею ничего против параметров запросов, я их использую. Но с их помощью вы не замените Select F1,F2 на Select Count(*)
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743644
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что должен сделать второй запрос? Вывести количество строк из первого запроса?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743653
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Arm79,

Первый запрос получает пагинированную информацию через "ORDER BY .. OFFSET ... ROWS FETCH NEXT ... ROWS ONLY;"
А второй запрос должен вернуть число всех, кто попадает под условие.

ну стандартная задача - верни мне первых 50, и покажи сколько там всего попадают в выборку.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743658
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай 1 запрос с дополнительным выходным параметром @out_param и исполни его

select f1, f2
from
where
order by
offset ;

set @out_param = select count(*) чего то там
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743662
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreи всего всего

Ну это-то как раз просто. "42".
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743673
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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() .

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

ага. кто-то таки заметил пасхальное яйцо )
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743685
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По моему, уже не один раз вам сказали, и не один человек - конкатенация в одну строку (без StringBuilder)
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743688
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreЯ хотел бы найти решение без двойного вызова sb.ToString()
Вызвать 1 раз, результат сохранить в промежуточную переменную, её конкатенировать с остальным хозяйством.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743695
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну общем я понял, что решения крутятся по одним и тем же двум вариантам. ок.
просто думал, может можно что-то эффективное сделать.

ладно тогда. можем закрывать. если только не появится какое-то гениальное решение )
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743710
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
WaspNewCoreгениальное решение )есть. Не пиши отчётники руками.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39743831
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreБудет ли ускорение ? Сомневаюсь.
Даже если будет, то ты его не заметишь, потому что время выполнения запроса на несколько порядков дольше.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744605
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
опять срач про ОРМ vs SQL. не интересно
ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744606
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachопять срач про ОРМ vs SQL. не интересно
ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH

весь топик не читал, тут был пример запроса, который генерировал ОРМ?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744607
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachlove_bachопять срач про ОРМ vs SQL. не интересно
ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH

весь топик не читал, тут был пример запроса, который генерировал ОРМ?

на языке ОРМ и SQL
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744611
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
love_bachопять срач про ОРМ vs SQL. не интересносрач скорее о генераторах отчётов
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744615
love_bach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилlove_bachопять срач про ОРМ vs SQL. не интересносрач скорее о генераторах отчётов

врядли
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39744659
WebPrj
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
love_bach,
В отчетнике, ты берешь, строишь портянку SQL в IDE СУБД.
Потом копипаст текст SQL А4 в сам отчетник.
Готово.
А тут он строит запрос длинной А4 классами и переменными.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39745552
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreВ StringBuilder формируется сложный текст запроса. На выходе нужно получить 2 текста отличающиеся только последними строчками.

нельзя 2 последние строчки текста приделывать отдельно от постоянной составляющей?

зачем эти гидропляски?
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39748023
WaspNewCore
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
love_bachlove_bachопять срач про ОРМ vs SQL. не интересно
ТС - делай, как считаешь нужным. А мы как-то уж пострадаем с этими никчомными EF, NH

весь топик не читал, тут был пример запроса, который генерировал ОРМ?

Не читал, но обсуждаю. :)

В данном топике нет ни слова про ОРМ и тем более его "vs" SQL. Тут о другом - о сборщике мусора и попытках минимизировать нагрузку на память. Это если кратко описать весь топик, чтобы его не нужно было читать :)

PS. Про ORM vs SQL я ругаюсь параллельно тут 21755813 . И очень очень жду ответа от практикующих.
...
Рейтинг: 0 / 0
Есть ли смысл оптимизировать такие строчки кода ?
    #39748132
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WaspNewCoreТут о другом - о сборщике мусора и попытках минимизировать нагрузку на памятьпопытка преждевременной оптимизации
...
Рейтинг: 0 / 0
50 сообщений из 50, показаны все 2 страниц
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Есть ли смысл оптимизировать такие строчки кода ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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