Box化確認ツール

.NET3.0 が出た記念ってわけでもないけど、Box 化確認ツールを作ってみました。しょぼいツールなのに驚きの効果が…w
きっかけは、自作の WinForm アプリがもっっっさりと遅くて、「WinForm、おせ〜」とか言いながら調べてみたら、実は原因は意図していない Box 化/ Unbox 化によるものでした。Box 化はものっすごく遅くなるので、遅いプログラムが嫌ならいつも気にするべきことです。まあ、そんなことがなくとも WinForm は遅いけど。
基本的なことを忘れてたことを反省して、簡単なツールにして VisualStudio から呼び出せるようにしたんでご紹介。

まずはバッチファイルを作製。バッチかよっ!ってつっこみは置いといて。場所はどこでもいいけど、ildasm と同じディレクトリに「BoxCheck.bat」の名前で作りました。中身はこんな。パスは適切なものに置き換えてください。

"パス\ildasm" /linenum /source /output:"%~n1.il" %1
find /n "box" "%~n1.il" > "%~n1.il.box.txt"
more "%~n1.il.box.txt" 

バッチ中の「%~n1」は引数(%1)のファイル名部分を表します。マイナー機能ですね…。

次に VisualStudio のツールメニューを開いて、外部ツールを選んで、開いたダイアログの「追加」をクリック。
タイトルを「[BoxCheck]」、コマンドに先のバッチファイルを書いて、引数を「$(TargetName)$(TargetExt)」、初期ディレクトリを「$(TargetDir)」にし、「終了時にウィンドウを閉じる」のチェックをはずします。
これでできあがり!

ildasm で IL を obj\ターゲット の下に書き出し、box の文字を探しているだけです。abc.exe がターゲット名だとすると、IL は abc.il の名前でテキストファイルになります。
バッチの後ろ2行は find と more するだけで実用的じゃないので、お好みのエディタで開くなりなんなりにして使ってください。ildasm のオプションやら何やらもお好みでいじくってください。

ちゃちぃツールだけど、Box化を常に意識の片隅に置いとくってのが、このツールの効果だったりします。