Вступить в клуб →
средняявопросПроизводительность и низкие задержки

Парсер логов замедлился в 20 раз на файле с битыми строками

std::optional<int> parseStatus(const std::string& field) {
    try {
        return std::stoi(field);
    } catch (const std::exception&) {
        return std::nullopt;
    }
}

На чистых логах парсер обрабатывает 2 млн строк в секунду. На файле, где треть полей статуса — "-", скорость падает в разы, а профиль заполнен функциями раскрутки стека _Unwind_*. Что исправить?

  • Разбирать число через std::from_chars
  • Ловить std::invalid_argument вместо exception
  • Пометить функцию parseStatus как noexcept
  • Вызывать std::stol вместо std::stoi

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела