Я перечитал документацию Benchmark и увидел, что в ней есть метод с именем measure
.Этот метод делает именно то, что я хочу: измерить время, необходимое вашему коду, и вернуть объект, который содержит пользовательское время, системное время, системное время детей и т. Д. Это так же просто, как
require 'benchmark'
measurement = Benchmark.measure do
# your code goes here
end
В процессе Iобнаружил, что вы можете добавить пользовательские строки в вывод Benchmark.Вы можете использовать это, чтобы получить лучшее из обоих миров (пользовательские измерения времени и хороший вывод в конце) следующим образом:
require 'benchmark'
measurements = []
10.times { measurements << Benchmark.measure { 1_000_000.times { a = "1" } } }
# measurements.sum or measurements.inject(0){...} does not work, since the
# array contains Benchmark instances, which cannot be coerced into Fixnum's
# Array#sum will work if you are using Rails
sum = measurements.inject(nil) { |sum, t| sum.nil? ? sum = t : sum += t }
avg = sum / measurements.size
# 7 is the width reserved for the description "sum:" and "avg:"
Benchmark.bm(7, "sum:", "avg:") do |b|
[sum, avg]
end
Результат будет выглядеть следующим образом:
user system total real
sum: 2.700000 0.000000 2.700000 ( 2.706234)
avg: 0.270000 0.000000 0.270000 ( 0.270623)