Open
Conversation
spajic
approved these changes
Jun 23, 2024
| Я решил исправить эту проблему, оптимизировав эту программу. | ||
|
|
||
| ## Формирование метрики | ||
| Для того, чтобы понимать, дают ли мои изменения положительный эффект на быстродействие программы я придумал использовать такую метрику: количество потребляемой памяти. |
| ### Ваша находка №1 | ||
|
|
||
| Я взял за основу проведенную в первом задании оптимизацию, поэтому мог сразу использовать полный файл data_large для тестирования потребления памяти. | ||
| Исходно программа потребляла 3888 мегабайт. |
|
|
||
| ### Ваша находка №2 | ||
| memory-profiler показал высокое использование памяти при мемоизации данных о пользователях и сессиях | ||
| Я переделал обработку строк на потоковый режим (пишем сразу в файл, когда собрали всю информацию по юзеру). Использовал гем oj (инструмент stream writer). |
Collaborator
There was a problem hiding this comment.
да, это кайфовое API, удобнее чем посимвольно json-строчку собирать
| В результате проделанной оптимизации наконец удалось обработать файл с данными. | ||
| Удалось улучшить метрику системы с 3888 Мб до 32 Мб и уложиться в заданный бюджет. | ||
| Возникли проблемы с развертыванием проекта в докере под M1 (не собирались нативные расширения), поэтому valgrind massif visualier воспользоваться не удалось. | ||
| Чтобы это частично компенсировать, я добавил периодический вывод в консоль потребляемой памяти, и в ходе обработки файла видно, что она не выходит за допустимые пределы. |
| Возникли проблемы с развертыванием проекта в докере под M1 (не собирались нативные расширения), поэтому valgrind massif visualier воспользоваться не удалось. | ||
| Чтобы это частично компенсировать, я добавил периодический вывод в консоль потребляемой памяти, и в ходе обработки файла видно, что она не выходит за допустимые пределы. | ||
|
|
||
| Скорость выполнения не ухудшилась в сравнении с оптимизированным первым заданием. |
Collaborator
There was a problem hiding this comment.
обычно быстрее становится у всех
| total_sessions += 1 | ||
| end | ||
| progressbar.increment | ||
| measure_memory if (progressbar.progress % 100_000).zero? |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.