ものがたり(旧)

atsushieno.hatenablog.com に続く

mono --profileとmono --trace

今さらな話かもしれないけど。

昨日の雑談meetingで、.NET開発にCLR Profilerを使ってみたら呼び出し回数とかいろいろ分かって便利だった、という話が出てきた。その時も少し話したのだけど、これはmonoでも簡単だ。monoを実行するときに --profile オプションを付けて実行すると、終わった後で膨大なプロファイルレポートを標準出力に出してくれる。処理時間のプロファイルとメモリ使用のプロファイルが両方出てくる。

プロファイル結果の読み方というのは、それなりに慣れるまではハマるかもしれない。典型的な例は再帰呼び出しを含むメソッドの実行時間。呼び出される側も呼び出す側も同じメソッドとして計測されてしまうので、プロファイルには向いていない。

たぶん(デバッグ用途で)もっと便利なのはmono --traceで、これはオプションで指定したnamespace, type, method, property等について、呼び出しがあるたびにその情報を標準出力に出してくれる。引数値や戻り値がそれなりに見えるようになるので、error-proneな箇所をこれで特定することができる。使い方はmono --help-traceを参照。

メモリ消費のチェックには、heap-buddyのレポートの方が分かりやすいかもしれない。ただしこちらはLinux用。