170 похожих чатов

Добрый день, тестирую один проект в uasurfer. Возникла проблема, там достаточно

долго работает нормализация, по факту это просто при большом размере strings.ToLower() либо у них есть функция для небольших строк, которая использует свой ToLower (copyLower) - в этом подходе она запихивает всё в буффер там уменьшает занчения.

Но и в одном и в другом подходе происходит alloc:
strings.ToLower() - вообще работает с map,
а их личная функция возаращает буффер, а string(buf) - это тоже alloc (у нас задача вернуть string)

strings.Replace - работает без alloc, но это достаточно долгое решение

может кто находил замену toLower без alloc? Или кто-то знает вариант как преобразовать buffer в строку без alloc т.е без string(buf)

func normalise(ua string) string {
if len(ua) <= 1024 {
var buf [1024]byte
ascii := copyLower(buf[:len(ua)], ua)
if !ascii {
// Fall back for non ascii characters
return strings.ToLower(ua)
}
return string(buf[:len(ua)])
}
// Fallback for unusually long strings
return strings.ToLower(ua)
}

func copyLower(b []byte, s string) bool {
for j := 0; j < len(s); j++ {
c := s[j]
if c > 127 {
return false
} else {
if 'A' <= c && c <= 'Z' {
c += 'a' - 'A'
}
}
b[j] = c
}
return true
}

2 ответов

10 просмотров

Попробуй использовать https://golang.org/pkg/unicode/utf8/#DecodeRune И вместо буфера клади сразу в ту же строку из которой читаешь.

Oleg-Krylov Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта