ふにゃるんv2

もとは、http://d.hatena.ne.jp/Wacky/

フリーの.NET用プロファイラを使ってみました(NProf, EQATEC Profiler)

個人的にも仕事でも、作ったソフトのボトルネックを探る為に、プロファイルしたい時があります。
そういう時に役立つソフトとして、プロファイラがあります。


.NETで使えるプロファイラとしては、以下が有名かと思います。(他にもあると思いますが、情報収集力が少ないので…)


ここでは、日曜ソフトな人々に優しい、無償ソフトの概要紹介と、EQATEC Profiler(とNProf)の体験紹介をします。

CLR Profiler(マイクロソフト製)

CLR Profilerは、マイクロソフトさんが無償で提供しているソフトで、お手軽なんですが、ちと一覧性に欠けます。
特に関数の呼び出し回数とか時間回りの表示ですね。最初グラフ表示してくれて、おぉ〜と思うんですが、リストで見たいなぁと思っちゃうんですよね。
まぁ、ログを書き出せるので、自分で一覧表を作りゃぁいいんでしょうけどね。

DevPartner Community Edition(Compuware製)

DevPartnerは、SoftICEで一世風靡した Compuware社(旧NuMega社)の提供しているソフトです。(…ってネタ古いっすね)
IDEに寄生するタイプのソフトで、専用のツールバーが用意され、そこでビルド&検証です。
ちなみに、うろ覚えですが、日本で配布されているのは確かVS2003までで、米国のはVS2005までが対象です。

NProf(フリーウェア)

フリーウェアで配布されているもので有名なのは、NProfでしょう。(というか、これしか知らない)
実行パスを入れて、F5キーで開始、終了すると各関数の呼び出し時間の比率が表示されます。
2
2 posted by (C)wacky

簡単で良いのですが、呼び出し回数の表示が出てこないのが少々辛いです。
後、ちょっと悲しいのが、2006年からバージョンアップされていないんですね。

EQATEC Profiler(EQATEC製)

で、これが今回の肝です。先日、ネットサーフィン(死語)していたら、偶然見つけました。


日本での紹介サイトは、↓これぐらいかな?

後、MSの開発者の方かな?の紹介も。


まずは、特長を挙げます。

  • 無償で使える。
  • ビルド済みのバイナリに対して、プロファイルできる。
  • .NET 2.0/3.0/3.5に対して使える。(CompactFrameworkにも使えるらしいです)
  • コールグラフ、関数の呼び出し回数、時間まで表示してくれる。


↓画面だけ見ても、結構使い勝手良さそうですよね?
5
5 posted by (C)wacky


本家は、以下の場所にあります。


ダウンロードに行くと、「Full Version」と「Basic Version」を選択します。
6
6 posted by (C)wacky
ぶっちゃけ、「Full Version」をお奨めします。
どっちでも無償ですし、「Basic Version」では起動する都度、「ご案内〜」ダイアログに悩まされます。


インストールに成功すると、2種類のソフトが入ります。

  • EQATEC Profiler : プロファイルだけ行うソフト
  • EQATEC Profiler Viewer : プロファイルした後、できたログを解析して結果表示するソフト

わざわざ2つに分けているのは、クライアント機でデータを回収&検証機で解析。という流れを想定しているんだと思います。


インストールした際、デモ用のプロジェクトが入っていますので、試してみましょう。
1
1 posted by (C)wacky


まずは、「EQATEC Profiler」の方を起動します。
次に、「Select application」のパス欄に、バイナリのある「フォルダ」を教えます。
3
3 posted by (C)wacky


真ん中の「Choose level」は、プロファイルの詳細度を示しているんだと思います。今一よくわかんないんですけど、「Full usual info」に設定しときゃOKですかね?


次に、右下の「Build」ボタンを押しますと、何やら処理を行います。(大体10秒程度)
4
4 posted by (C)wacky
ここで注意して欲しいのは、例えばプロファイル対象のバイナリが、「C:\Program Files\EQATEC\EQATECProfiler Basic\DemoApp\Bubbles\bin\Debug」フォルダにあったとしますね。
ここで「Build」ボタンを押すと、プロファイル可能なバイナリは、「C:\Program Files\EQATEC\EQATECProfiler Basic\DemoApp\Bubbles\bin\Debug (Profiled)」フォルダに出来るって事です。
どうやら、プロファイルする為のアセンブリとか突っ込んじゃっているので、元のファイルを残して別のフォルダに作っているようなんですね。


次にプロファイルなんですが、先の「C:\Program Files\EQATEC\EQATECProfiler Basic\DemoApp\Bubbles\bin\Debug (Profiled)」フォルダのバイナリを実行するだけです。
ここで実行するために、上記の「EQATEC Profiler」は必要ありません。


じゃぁ、「結果はどこに出力されるんだよ?」と思いますよね?(私は、何度もモンキーテストしました)
実は、(マニュアルをよく読めば書いてあるんですが)「temp」フォルダや「Storage Card」「SDCard」フォルダに出来るそうです。
私の場合、「C:\temp」フォルダの下に、「profile-20080823-204242.log.xml」ってな感じのファイルが出来ました。


このファイルが出力されればしめたもので、後は「EQATEC Profiler Viewer」を起動して、上記ファイルを読み込ませればOKです。
以下の画面が得られます。
5
5 posted by (C)wacky

画面は非常に見やすく、使い勝手も良いです。
最初、何でアプリ内から呼び出せないんだ?と思ってましたけど、実運用を考えると(例えばお客様の所でデータ収集)、こっちの方が現実的ですよね?

まとめ

  • EQATEC Profilerは、.NETのプロファイラとして非常に優秀だと思います。
  • ただ、C++/CLIとちゃんぽんアセンブリのアプリを読み込ませたら、何故だか出力してくれませんでした。(出力する場合もある)