Skip to content

Conversation

@darialapina
Copy link

No description provided.


### Находка №4
Запустила ruby-prof+qcachegrind. Стало очевидно, что наибольшее число аллокаций происходит при переборе массивов при вызове метода collect_stats_from_users. Проблема в том, что метод вызывается 7 раз для сбора информации, когда можно всё собрать за один проход. Тем более, что выше уже есть перебор всех пользователей для сбора user_objects. Гипотиза - переписать сбор данных в один проход по массиву пользователей.
Думала, что данная оптимизация принесёт больше пользы.
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Хм, мда. А map'ы то я не убрала 🤔 Видимо, останутся на следующую порцию оптимизаций.

Copy link
Owner

@spajic spajic left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Approve + some comments

### Находка №2
При запуске memory_profiler становится очевидным, что происходит постоянное создание одинаковых строк, которые являются ключами в хэшах.
Заменим строки на символы. Попутно, убрав из хэшей пользователя и сессия не используемые данные.
Эта оптимизация позволила сократить время работы скрипта до 11.21 сек.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А какое было изначально?

Думала, что данная оптимизация принесёт больше пользы.
Теперь файл в среднем обрабатывается ~0.41 сек при потреблении ~34 Мб памяти.
То есть улучшения в рамках погрешности.
Возможно как-то связано с использованием патченой версии руби для этой итерации.
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Измерения лучше проводить в равных условиях.
То есть, чтобы воспользоваться профилированием памяти и посмотреть отчёт - воспользоваться патченной версией можно.
Но проверить влияние сделанных изменений на метрику корректно на той версии Ruby, в которой делались остальные замеры метрики.

Полный файл с данными обрабатывается за 78.09 сек, при этом выполнение скрипта потребляет 2894 Мб памяти.

## Защита от регресса производительности
Для защиты от потери достигнутого прогресса при дальнейших изменениях программы сделано хммм... ничего?
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Тут предполагалось написать тестик, но можно в ДЗ №2

@sessions = sessions
end
end
SEPARATOR = ','.freeze
Copy link
Owner

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Можно ещё было заюзать волшебный коммент # frozen_string_literal: true

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants