個人的にも仕事でも、作ったソフトのボトルネックを探る為に、プロファイルしたい時があります。
そういう時に役立つソフトとして、プロファイラがあります。
.NETで使えるプロファイラとしては、以下が有名かと思います。(他にもあると思いますが、情報収集力が少ないので…)
- 商用:Visual Studio 2008 Team System
http://www.microsoft.com/japan/msdn/vstudio/products/vs08/compare.aspx - 商用:dotTRACE
http://www.jetbrains.com/profiler/index.html - 無償:DevPartner Profiler Community Edition
http://www.compuware.co.jp/products/devpartner_fm/dpsprofiler.html - 無償:CLR Profiler for .NET Framework 2.0
http://www.microsoft.com/downloads/details.aspx?FamilyID=a362781c-3870-43be-8926-862b40aa0cd0&DisplayLang=en - 無償:NProf
http://sourceforge.net/projects/nprof/ - 無償:EQATEC Profiler(←今回初めて知った)
http://www.eqatec.com/tools/profiler
ここでは、日曜ソフトな人々に優しい、無償ソフトの概要紹介と、EQATEC Profiler(とNProf)の体験紹介をします。
CLR Profiler(マイクロソフト製)
CLR Profilerは、マイクロソフトさんが無償で提供しているソフトで、お手軽なんですが、ちと一覧性に欠けます。
特に関数の呼び出し回数とか時間回りの表示ですね。最初グラフ表示してくれて、おぉ〜と思うんですが、リストで見たいなぁと思っちゃうんですよね。
まぁ、ログを書き出せるので、自分で一覧表を作りゃぁいいんでしょうけどね。
DevPartner Community Edition(Compuware製)
DevPartnerは、SoftICEで一世風靡した Compuware社(旧NuMega社)の提供しているソフトです。(…ってネタ古いっすね)
IDEに寄生するタイプのソフトで、専用のツールバーが用意され、そこでビルド&検証です。
ちなみに、うろ覚えですが、日本で配布されているのは確かVS2003までで、米国のはVS2005までが対象です。
NProf(フリーウェア)
フリーウェアで配布されているもので有名なのは、NProfでしょう。(というか、これしか知らない)
実行パスを入れて、F5キーで開始、終了すると各関数の呼び出し時間の比率が表示されます。
2 posted by (C)wacky
簡単で良いのですが、呼び出し回数の表示が出てこないのが少々辛いです。
後、ちょっと悲しいのが、2006年からバージョンアップされていないんですね。
EQATEC Profiler(EQATEC製)
で、これが今回の肝です。先日、ネットサーフィン(死語)していたら、偶然見つけました。
日本での紹介サイトは、↓これぐらいかな?
- InfoQ: .NET Compact Framework向けEQATECコードプロファイラー v. 1.2に新機能追加
http://www.infoq.com/jp/news/2008/06/EQATEC-Code-Profiler-1.2 - 碧落 - 不定期日記(2008/06/25)
http://sgry.sakura.ne.jp/articles/journal_09.html
後、MSの開発者の方かな?の紹介も。
- Windows Embedded Blog : EQATEC: .NET Compact Framework Application Profiler
http://blogs.msdn.com/mikehall/archive/2008/05/06/eqatec-net-compact-framework-application-profiler.aspx
まずは、特長を挙げます。
- 無償で使える。
- ビルド済みのバイナリに対して、プロファイルできる。
- .NET 2.0/3.0/3.5に対して使える。(CompactFrameworkにも使えるらしいです)
- コールグラフ、関数の呼び出し回数、時間まで表示してくれる。
↓画面だけ見ても、結構使い勝手良さそうですよね?
5 posted by (C)wacky
本家は、以下の場所にあります。
- EQATEC Profiler
http://www.eqatec.com/tools/profiler
ダウンロードに行くと、「Full Version」と「Basic Version」を選択します。
6 posted by (C)wacky
ぶっちゃけ、「Full Version」をお奨めします。
どっちでも無償ですし、「Basic Version」では起動する都度、「ご案内〜」ダイアログに悩まされます。
インストールに成功すると、2種類のソフトが入ります。
- EQATEC Profiler : プロファイルだけ行うソフト
- EQATEC Profiler Viewer : プロファイルした後、できたログを解析して結果表示するソフト
わざわざ2つに分けているのは、クライアント機でデータを回収&検証機で解析。という流れを想定しているんだと思います。
インストールした際、デモ用のプロジェクトが入っていますので、試してみましょう。
1 posted by (C)wacky
まずは、「EQATEC Profiler」の方を起動します。
次に、「Select application」のパス欄に、バイナリのある「フォルダ」を教えます。
3 posted by (C)wacky
真ん中の「Choose level」は、プロファイルの詳細度を示しているんだと思います。今一よくわかんないんですけど、「Full usual info」に設定しときゃOKですかね?
次に、右下の「Build」ボタンを押しますと、何やら処理を行います。(大体10秒程度)
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 posted by (C)wacky
画面は非常に見やすく、使い勝手も良いです。
最初、何でアプリ内から呼び出せないんだ?と思ってましたけど、実運用を考えると(例えばお客様の所でデータ収集)、こっちの方が現実的ですよね?