Треть времени обработчика сообщений уходит на malloc и free
void Processor::handleBatch(const std::vector<RawMsg>& batch) {
for (const auto& raw : batch) {
std::string text = decode(raw); // новая строка ~2 КБ
std::vector<std::string_view> fields;
split(text, '|', fields); // ~40 полей
route(fields);
}
}
Пачки по 10 тысяч сообщений. Профиль: 30% времени в malloc, free и memmove. Что изменить в первую очередь?
- Вынести буферы из цикла и переиспользовать
- Заменить string_view на std::string в fields
- Вызывать shrink_to_fit у буферов в конце итерации
- Обработать каждое сообщение в своём потоке
