четверг, 17 января 2013 г.

Оптимизируем загрузку GeoIP

Всем привет.
Пост для программистов! 
Возможно кто-то из вас в свободное время "копает" исходный код FlylinkDC++ в академических целях
и если вдруг вы заметили элементы говно-кода обязательно сообщите об этом!
Пример использования профайлера для поиска хот поинтов по нагрузке на CPU
Шаг 1   - под профайлером запускаем флайлинк и после завершения процесса студия показывает нам стек вызова "горячей" функции.














Шаг 2 - находим тормозной кусок в коде и , где выполняется заполнение массива стран и провайдеров через использование 
линейного поиска по std::vector. данный вызов выполняется ~180 тысяч раз
при этом в результирующем векрторе набирается всего ~2900 названий стран и провайдеров.

Шаг 3 - заводим дополнительную хэш таблицу std::unordered_map
через которую пробрасываем наши 180 тысяч записей. и после индексации всего массива чистим.









Шаг 4 - Сравниваем скорость загрузки GeoIP старой и новой версии:












Отправить комментарий