-
Notifications
You must be signed in to change notification settings - Fork 140
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[potashin] optimization #107
base: master
Are you sure you want to change the base?
[potashin] optimization #107
Conversation
potashin
commented
May 6, 2024

There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
valgrind вероятно не запустился корректно, так как там памяти меньше 20мб
им на самом деле более интересно чекать на стадии когда память ещё нарастает во время работы программы; когда потребление уже константное, там можно только это засвидетельствовать (но есть ещё кейс когда программа например сразу крашится / не может найти файл, тогда это тоже выглядит как константное потребление памяти, но меньше минимума)
Я решил исправить эту проблему, оптимизировав эту программу. | ||
|
||
## Формирование метрики | ||
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: количество потребляемой памяти при просчете 100к записей (885 мб на старте, 11.4 секунды) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
### Ваша находка №6 | ||
- профилировщик показывает `48221760 task-2.rb:72` как лидирующую позицию, но дальнейшие попытки оптимизации не приводят к снижению потребляемой памяти: основной точкой роста является ограничение накапливаемых данных | ||
- переписываю программу в потоковом стиле (накапливаем данные только по 1 пользователю и его сессиям за раз, после накопления собираем статистику, пишем в файл и начинаем сначала) | ||
- снизилась до 21мб для 100к (для всего файла тоже 21мб) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
да, самое кайфовое, что теперь любой объём данных так можно перелопатить
task-2.rb
Outdated
user_stats['longestSession'] = session['time'] | ||
end | ||
|
||
unless report['allBrowsers'].include?(session['browser']) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Set бы, Array.include? -> O(N), Set << browser -> O(1)