Ruby 2.6.0 リファレンスマニュアル > ライブラリ一覧 > benchmarkライブラリ > Benchmarkモジュール > bmbm
bmbm(width = 0) {|job| ... } -> [Benchmark::Tms]
[permalink][rdoc]Benchmark::Job オブジェクトを生成して、それを引数として与えられたブロックを実行します。
ベンチマークの結果は GC の影響によって歪められてしまうことがあります。このメソッドは与えられたブロックを二度実行する事によってこの影響を最小化します。一回目は実行環境を安定化するためにリハーサルとして実行します。二回目は本番として実行します。
二回目のブロック実行の前に GC.start を実行しますが、この実行時間は計測には含まれません。しかし、実際にはこのメソッドを使用しても、GC などの影響を分離することは保証されません。
require 'benchmark'
array = (1..1000000).map { rand }
Benchmark.bmbm do |x|
x.report("sort!") { array.dup.sort! }
x.report("sort") { array.dup.sort }
end
#=>
#
# Rehearsal -----------------------------------------
# sort! 11.928000 0.010000 11.938000 ( 12.756000)
# sort 13.048000 0.020000 13.068000 ( 13.857000)
# ------------------------------- total: 25.006000sec
#
# user system total real
# sort! 12.959000 0.010000 12.969000 ( 13.793000)
# sort 12.007000 0.000000 12.007000 ( 12.791000)