ふにゃるんv2

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

Visual Studio 2005と2008のコンパイル速度比較

年末にVisual Studio 2008(日本語版)が出たので、早速インストールして、ちょこちょこお試し中です。


しかし、起動速いですね。VS2005より速いのではないかい?と思ってしまう程です。
という訳で、試しにコンパイル速度の比較をしてみようと思いました。


時間計測する時、Linuxだとtimeコマンドを使う所なんですが、Windows系だとtimeitコマンドがあるらしいです。(要リソースキット)


これと、最近覚えたmsbuildコマンドを使ってコンパイル速度の比較をしてみました。

msbuildって便利

余談なんですが、msbuildコマンドって便利ですね。(気づくの、遅っ)

チュートリアルを見ると、antみたいなXML構文がずらずら並んでいるんで、「記述するの面倒だなぁ。Visual Studio上で簡単記述できるようになるか、業務で自動ビルドシステムを構築する時に検討しようかな?」とぐらいに思ってたんです。
けど、Debug/Releaseビルドを何度も切り替えるのが段々面倒になってきて、何かダブルクリックポンする方法が無いかな?と思って読み返してみたら、「msbuildは、Visual Studioのソリューションファイルを入力に使えるよ。」って書いてあったんで、試しに使ってみたら意外と簡単。

いや〜、あのタスクとか条件分岐とかの複雑な構文に惑わされていましたよ。

ビルド時間の比較

まずは、最近でたIronPython 2.0A7のビルド時間を比較してみます。

Visual Studio 2005の場合。

F:\Wacky\Test\python\IronPython\IronPython-2.0A7-Src\IronPython-2.0A7\Src>timeit
 msbuild IronPython.sln /t:rebuild /p:Configuration=Release
...

ビルドに成功しました。
    0 警告
    0 エラー

経過時間 00:00:28.40

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        1:26 pm, Tuesday, January 1 2008
Elapsed Time:     0:00:29.500
Process Time:     0:00:02.234
System Calls:     900942
Context Switches: 204957
Page Faults:      107366
Bytes Read:       38929700
Bytes Written:    27032505
Bytes Other:      2485180

次、Visual Studio 2008の場合。

F:\Wacky\Test\python\IronPython\IronPython-2.0A7-Src\IronPython-2.0A7\Src>timeit
 msbuild IronPython2008.sln /t:Rebuild /p:Configuration=Release
...

ビルドに成功しました。
    0 警告
    0 エラー

経過時間 00:00:13.39

Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        1:30 pm, Tuesday, January 1 2008
Elapsed Time:     0:00:14.109
Process Time:     0:00:01.687
System Calls:     560397
Context Switches: 91521
Page Faults:      71058
Bytes Read:       36930594
Bytes Written:    24823377
Bytes Other:      2011208

表にすると以下の感じですね。

_ VS2005 VS2008
経過時間(Elapsed Time) 0:00:29.500 0:00:14.109
内部処理時間(Process Time) 0:00:02.234 0:00:01.687


後、手持ちのコードもビルドしてみました。
VS2005→VS2008へのプロジェクト変換は、VS2008を開いて、ソリューションファイルをドラッグ&ドロップすると、変換ウィザードが開くので、ぽちぽち進めるだけです。何て事はありません。

VS2005の場合:
経過時間 00:01:26.71
Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        1:14 pm, Tuesday, January 1 2008
Elapsed Time:     0:01:27.937
Process Time:     0:00:12.453
System Calls:     3282114
Context Switches: 812886
Page Faults:      559369
Bytes Read:       257160989
Bytes Written:    132760112
Bytes Other:      15370215

VS2008の場合:
経過時間 00:01:01.25
Version Number:   Windows NT 5.1 (Build 2600)
Exit Time:        1:20 pm, Tuesday, January 1 2008
Elapsed Time:     0:01:02.734
Process Time:     0:00:11.593
System Calls:     2906299
Context Switches: 887275
Page Faults:      517774
Bytes Read:       200332063
Bytes Written:    131496199
Bytes Other:      14822484

表にすると以下の感じです。

_ VS2005 VS2008
経過時間(Elapsed Time) 0:01:27.937 0:01:02.734
内部処理時間(Process Time) 0:00:12.453 0:00:11.593

う〜ん、速くなってますね。

まとめ

恒例のまとめ

  • 手持ちの2つだけの検証ですが、VS2008は25%〜50%近くコンパイル速度が速いです
    (冗談みたいな数値が出てきたんでビックリ(一応Cleanした後、Rebuildしたんですよ?)。う〜ん、誰か追検証してくれないかなぁ)
  • 関係ないけど、msbuild万歳!!