.NETとプロファイラ

去年の日記で、Javaのプロファイラについて言及したが、同様に.NETでも良質なプロファイラが無いか、ずっと物色している。.NETもJava同様にプロファリング用のAPIは公開されており、サードパーティ、はたまた個人がプロファイラを開発することが可能なので、オープンソースのプロファイラがあれば、それに越したことは無いと思っているのであるが、.NETは残念ながら快適に使えるプロファイラは存在していないようだ。(いくつかプロジェクトを知っているが、.NET2.0に対応していなかったり、プロジェクトが開発を停止?していたりして、残念だが使えるものが無い。また、MSDN経由でCLR Profilerというプロファイリングアプリケーションを入手できるが、これは.NETのプロファイリングAPI/Serviceの一種の技術デモであり、仕事としてのプロファィリングには使えない)
仕方が無いので、商用のプロファイラも対象としたが、商用のプロファィラとなると今度は非常に多くの製品が存在しているため、条件を以下のように設定した。

  • シングルライセンス 3万円以下であること($300以下であること)
  • .NET2.0に対応していること(できれば.NET1.1にも対応していること)
  • 好きな時にプロファイリング結果のスナップショットを採取できること
  • 簡単にアプリケーションプロファイリングを開始できること

最初の条件は非常に重要である。この手のアプリケーションを購入したことがある開発者はご存じだと思うが、元来、「パフォーマンスチューニング」という分野で使用するアプリケーションは非常に高価なことが多い。無論、高価であってもプロが使って使い易く、使っていることによる効果が圧倒的であれば高価であっても構わない。そう、例えば、レタッチであれば、AdobePhotoShop、CG作成であれば、NewTekのLightWave 3D等のようなソフトウェアであれば良い訳だが、プロファイラも高価であることが=良いアプリケーションであるとは限らないのである。
ということで有名ベンダーの殆どのプロファイラは条件1で殆どふるいにかけられてしまうのだが、その中で、海外製のプロファイラで2つのよさげなプロファイラが、上記の条件に掛った。

ANTS Profiler /red-gate software Single Licence $294
dotTrace Profiler /JetBrains software Single Licence $245

両者とも開発元は著名なので、ご存じの開発者も多いことだろう。前者はSQL Server用のツールで有名だし、後者はJavaの開発ツールである、IntelJ IDEAであまりに有名だ。両者とも、上記の条件をほぼ満たしており良いプロファイラだが、特に後者の"dotTrace Profiler"は、Javaのプロファイラとして紹介したOptimizeItとほぼ同様のスレッド毎のツリービュー等により、トレース機能は秀逸である。

これは拙作のフレームワークの初期化時のトレース結果であるが、DIコンテナが生成されて、そこからロガーをインスタンス化する為にファクトリを経由で、リモーティング用のロガーピアクラス、最終的にはLog4netのXmlConfigerクラスに到達して、どれ位の時間が経過しているかが一目瞭然である。
dotTrace Profilerの残念なのは、これだけ秀逸なトレース機能を持つのに、メモリプロファイリング機能が無いことである。ANTS Profilerもよさげではあるが、dotTrace Profilerのトレース機能を一度見てしまうと、ANTS Profilerのトレース機能はちょっと劣るのだ。中々悩ましい。

どなたか、.NET2.0で使用する本格的なプロファイラ、これぞ決定版という製品があれば教えて頂けないだろうか。