しめ鯖日記

swift, iPhoneアプリ開発, ruby on rails等のTipsや入門記事書いてます

【Ruby】benchmarkで処理速度を計測

Ruby標準ライブラリのbenchmarkを使って処理速度を測定してみました。

使い方は下の通りです。
配列へのpushの10000回ループと100回ループを測定しています。

require 'benchmark'

Benchmark.bm(10) do |x|
  x.report("10,000回") do
    arr = []
    (0...10000).each { |i| arr.push(i) }
  end
  x.report("100回") do
    arr = []
    (0...100).each { |i| arr.push(i) }
  end
end

結果は下の通りです。
realが実際にかかった時間、userがUser CPU timeでsystemがSysten CPU time、totalはTotal CPU timeです。

f:id:llcc:20180107173239p:plain

CPU timeはこちらの記事が参考になりました。

real time/user CPU time/system CPU timeの違いをメモ | Siguniang's Blog

Benchmark.bmの引数に渡している数字はラベルのサイズです。
引数を省略すると下のようにずれてしまうので入れています。

f:id:llcc:20180107173253p:plain

bmメソッドの代わりにbenchmarkメソッドを使うと出力のカスタマイズができます。

require 'benchmark'

Benchmark.benchmark("実際の時間\n", 10, "%10.6r\n") do |x|
  x.report("10,000回") do
    arr = []
    (0...10_000).each { |i| arr.push(i) }
  end
  x.report("100回") do
    arr = []
    (0...100).each { |i| arr.push(i) }
  end
end

f:id:llcc:20180107174445p:plain

手軽に実行時間を測定したい時はrealtimeメソッドも便利です。
このメソッドは実行時間を返してくれます。

require 'benchmark'

time = Benchmark.realtime do
  arr = []
  (0...10_000).each { |i| arr.push(i) }
end
p time

f:id:llcc:20180107174700p:plain