В настоящее время я программирую систему чата на основе модели сервер-клиент и использую TCP в качестве протокола связи. Хотя он работает, как и ожидалось, я бы хотел еще больше оптимизировать важные части на стороне сервера.
Сервер использует четыре дополнительных потока для обработки новых соединений, ввода с консоли и т. Д., Не блокируя обычные разговоры в чате. Ну, есть только один поток для всех сообщений, которые отправляются от клиента к клиенту, поэтому я предполагаю, что было бы хорошо оптимизировать код там, так как это было бы наиболее очевидным узким местом. После прочтения данных в каждом клиентском сокете, данные должны быть обработаны с использованием различных шагов. Одним из таких шагов будет проверка на наличие заблокированных слов. И вот тут начинается мой оригинальный вопрос.
Я играл с std::string::find()
и функцией strstr()
. Согласно моим тестам, std::string::find()
был явно быстрее, чем старая функция в стиле C strstr()
.
Я знаю, что std::string
очень хорошо оптимизирован, но массивы char
в стиле C и их собственные функции всегда казались несколько быстрее, особенно если строка должна создаваться снова и снова.
Итак, есть ли что-нибудь быстрее, чем std::string::find()
для сканирования серии символов на наличие заблокированных слов? std::string::find()
быстрее strstr()
или мои тесты паршивые? Я знаю, что выигрыш может быть незначительным по сравнению с усилиями, необходимыми для поддержания чистоты массивов и их функций в стиле C char
, но я бы хотел сохранить его как можно быстрее, даже если это только для целей тестирования.
РЕДАКТИРОВАТЬ: Извините, забыл упомянуть, что я использую MSVC ++ 2010 Express. Я ориентируюсь только на машины Windows.