library profile

要約

Ruby プログラムのためのプロファイラです。プロファイラとは効率改善のための調査に用いられるツールのことです。 profile ライブラリは各メソッドの実行時間に関する統計を出力します。

profile はそれ自身がオーバーヘッドになるためメソッド呼び出しあたりの処理時間がかなり遅くなります。

使い方

以下のように、ruby に -r profile オプションを付けて実行します。

$ ruby -r profile foo.rb

foo.rb の実行が終わると標準エラー出力にプロファイルが出力されます。

プロファイルは各メソッドの実行時間に関する統計からなりますが、この時間には大きく分けて 2 種類あります。ひとつは、メソッドが呼び出されてから返るまでの時間です。もうひとつは、全体の時間からそのメソッド内で行なわれた他の呼び出しに費やしたすべての時間を引いた時間です。以下の説明では前者を全体時間、後者を正味時間と呼ぶことにします。

出力の意味

プロファイルの結果は例えば次のようになります。

$ ruby -r profile sample/sieve.rb 1000
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47 … 略 …
  %   cumulative   self              self     total
 time   seconds   seconds    calls  ms/call  ms/call  name
 33.87     1.49      1.49       11   135.65   214.49  Fixnum#step
 31.38     2.88      1.38     2410     0.57     0.57  Array#[]=
 27.84     4.10      1.23        2   613.28  2070.31  Range#each
  4.26     4.29      0.19        1   187.50   234.38  Array#join
  1.06     4.34      0.05      168     0.28     0.28  Fixnum#to_s
  0.35     4.35      0.02       31     0.50     0.50  Fixnum#+
… 以下略 …

おのおのの行に現れる各フィールドの意味は左から順に次の通りです。

  1. 全体時間のパーセンテージ
  2. 全体時間の総和(単位は秒)
  3. 正味時間の総和(秒)
  4. 呼び出された回数
  5. 1回の呼び出し当たりの平均正味時間(ミリ秒)
  6. 1回の呼び出し当たりの平均全体時間(ミリ秒)
  7. メソッド名