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

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

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














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

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









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












3 комментария:

Анонимный комментирует...

Уберите нецензурные слова из Вашего текста, пожалуйста. Впоследствии будьте аккуратнее в выражениях.

Pavel Pimenov комментирует...

уточните о каком слове идет речь?

Elle Solomina комментирует...

Паш, напиши "биоразложимого кода" :)