Skip to content

Commit 2179cc6

Browse files
committed
added performance spec
1 parent 84b728c commit 2179cc6

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

case-study.md

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -103,20 +103,11 @@ cols = line.split(',')
103103
- Добавил в начало файла `# frozen_string_literal: true`
104104
- До оптимизации программе аллоцировалось 184MB памяти и 2.5 млн объектов на файле размером 100_000 строк, после оптимизации уже 166MB и только 2млн объектов.
105105

106-
### №X
107-
```
108-
report['usersStats'][user_key] = report['usersStats'][user_key].merge(block.call(user))
109-
```
110-
- какой отчёт показал главную точку роста
111-
- как вы решили её оптимизировать
112-
- как изменилась метрика
113-
- как изменился отчёт профилировщика
106+
Дальнейшие оптимизации не приносили существенного прироста по эффективности. Было принято решение переписать приложение на потоковую обработку файла.
114107

115108
## Результаты
116109
В результате проделанной оптимизации наконец удалось обработать файл с данными.
117-
Удалось улучшить метрику системы с *того, что у вас было в начале, до того, что получилось в конце* и уложиться в заданный бюджет.
118-
119-
*Какими ещё результами можете поделиться*
110+
Удалось добиться стабильного потребления памяти в пределах 20-30 мб при обработке файлов любых размеров.
120111

121112
## Защита от регрессии производительности
122113
Для защиты от потери достигнутого прогресса при дальнейших изменениях программы *о performance-тестах, которые вы написали*

performance_test.rb

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# frozen_string_literal: true
2+
3+
require 'rspec'
4+
require_relative 'task-2'
5+
6+
RSpec.describe 'Memory usage' do
7+
before { File.write('result.json', '') }
8+
9+
it 'consumes no more than 70MB of memory' do
10+
memory_before = `ps -o rss= -p #{Process.pid}`.to_i / 1024
11+
12+
work('data_large.txt', true)
13+
14+
memory_after = `ps -o rss= -p #{Process.pid}`.to_i / 1024
15+
memory_usage = memory_after - memory_before
16+
17+
puts "Memory usage during test: #{memory_usage} MB"
18+
expect(memory_usage).to be <= 70
19+
end
20+
end
21+

0 commit comments

Comments
 (0)