x)
я перевел частично на стрингбилдер
sb.WriteString(fmt.Sprintf())
Вопрос, а насколько дорого обходится Sprintf?
Есть ли смысл идти дальше, доводить до абсурда типа
sb.WriteString("xxx=")
sb.WriteString(x)
sb.WriteString(",")
??
> насколько дорого примерно на 3.58
насколько дорого относительно приведенной ниже конструкции со WriteString?
Напишите бенчмарк
Это не доводить до абсурда, это то как билдер билдит.
а вочему это вообще важно? вы не пробовали померять, какую часть ресурсов ваши довольно неэффективные строковые операции отъедают? (никакую) PS cmd += fmt.Sprintf("xxx=%s,", x) - это плохо cmd = fmt.Sprintf(“%sxxx=%s,", cmd, x) - лучше
лучше-хуже тоже спорно. есть оптимизации ж. меряяять над, а без измерений - 3.58 самый верный ответ.
не, там бесспорно, там лишняя аллокация всплывает
хо хо. сегодня "вслывает", а завтра компилер подпилят под такие кейсы и не будет - только мерять. Я вам могу показать на .net где один и тот же код компилится совсем в разное (как раз про строки) - оптимизатор делает своё дело (за гошку не скажу так сразу - ибо не изучал). вот статья о .net - не думаю что подобное невозможно (или не будет возможно) в го.
ну вот как оптимизатор начнет это оптимизировать - так и поговорим. но - не начнет, потому что, повторюсь, на интегральную производительность это не влияет никак
ну ок, не хотите чтобы тесты падали - не пишите тесты - тоже вариат, чо.
не все мнения едины мне подход что когда то за горизонтом планирования что то измениться неблизок
мне проще написать бенч, загнать его в ci и смотреть на график графаны + добавить алерты если надо чем "думать вот это всё".... хотя из коробки, конечн, снапшотинга бенчмарков нету
> есть оптимизации Вы чатиком не ошиблись?
а где вы там учитали про .net / cpp ? в том сообщении что процитировали
> есть оптимизации
ну например для разных типов есть оптимизации в fmt sprintf - это я по-памяти, мож еще что накрутили, а может еще накрутят. я не понимаю: вы не любите бенчи или что?)
а я инженер и предпочитаю не тыкать пальцем в небо, а проверить гипотезу тестом.
А зачем доводить до абсурда Используй и билдер и fmt Есть же fmt.Fprintf, пиши им в буфер стринг билдера напрямую. var b strings.Builder b.Grow(32) // ну или сколько тебе там надо fmt.Fprintf(&b, "xxx=%s”, x)
Вот это как раз абсурд. Делать grow на скорее всего не оптимальную величину вместо writestring который оптимальный.
Обсуждают сегодня