Skip to content
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

Open
wants to merge 2 commits into
base: master
Choose a base branch
from

Conversation

potashin
Copy link

@potashin potashin commented May 6, 2024

Screenshot 2024-05-07 at 01 48 16

Copy link
Collaborator

@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.

valgrind вероятно не запустился корректно, так как там памяти меньше 20мб

им на самом деле более интересно чекать на стадии когда память ещё нарастает во время работы программы; когда потребление уже константное, там можно только это засвидетельствовать (но есть ещё кейс когда программа например сразу крашится / не может найти файл, тогда это тоже выглядит как константное потребление памяти, но меньше минимума)

Я решил исправить эту проблему, оптимизировав эту программу.

## Формирование метрики
Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: количество потребляемой памяти при просчете 100к записей (885 мб на старте, 11.4 секунды)
Copy link
Collaborator

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мб)
Copy link
Collaborator

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'])
Copy link
Collaborator

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)

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