Perlゼミ

  1. Perl
  2. モジュール
  3. here

Devel::DProf - シンプルなプロファイラ

プログラムを実行しても必要なパフォーマンスが得られないことがあります。どの部分がボトルネックになっているのかを調べるのは簡単なことではありません。プロファイラと呼ばれるツールを利用すればプログラムの中のどの処理で時間がかかっているかを調べることができます。(現在であればDevel::NYTProfを利用するのがよいでしょう。)

標準モジュールにシンプルなプロファイラであるDevel::DProfモジュールがあるのでこれを利用することができます。

プロファイルを作成するのは簡単です。次のコマンドを実行するとカレントディレクトリに「tmon.out」というプロファイルを情報を出力したファイルが作成されます。

# プロファイル情報の作成
perl -d:DProf target.pl

「tmon.out」を見やすいフォーマットで表示するにはdprofppコマンドを実行します。

# プロファイルを見やすいフォーマットで表示
dprofpp

すると次のような見やすいフォーマットで出力されます。

# プロファイル
Total Elapsed Time = 1.171916 Seconds
  User+System Time = 1.171916 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c  Name
 78.6   0.922  0.922      2   0.4610 0.4610  main::func2
 18.6   0.218  0.218      1   0.2180 0.2180  main::func1
 1.37   0.016  0.016      5   0.0032 0.0032  main::BEGIN
 0.00       - -0.000      1        -      -  strict::bits
 0.00       - -0.000      2        -      -  strict::import
 0.00       - -0.000      2        -      -  warnings::import

各項目の意味は次のようになっています。時間がかかった順に上位から表示されます。

%Time サブルーチンの実行時間の全体に対する割合
ExclSec サブルーチンの実行時間(サブルーチンの呼び出しを含まない)
CumulS サブルーチンの実行時間(サブルーチンの呼び出しを含む)
#Calls ルーチン呼び出し回数
sec/call 1回あたりのサブルーチンの実行時間(サブルーチンの呼び出しを含まない)
Csec/c 1回あたりのサブルーチンの実行時間(サブルーチンの呼び出しを含む)
Name サブルーチン名

上記の結果はスクリプトを実行した場合の私の環境での結果です。

use strict;
use warnings;

func1();
func2();
func2();

sub func1 {
  my $i = 0;
  while ($i < 1000000) {
    $i++;
  }
}

sub func2 {
  my $i = 0;
  while ($i < 2000000) {
    $i++;
  }
}

while文を使って数値をインクリメントしています。

Perlの書籍
  • 初めてのPerl 第7版

    Perl入門 定番の一冊
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
  • 詳説 正規表現

    正規表現の詳細な解説
  • Perlの書籍販売 14冊 »
自己紹介
木本裕紀(きもとゆうき)

Twitter

フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎
Perlの求人広告募集中