vol.20

ILで遊んでみよう!

C#とVB.NETの局所的比較

update:2005/06/27


VB.NETとC#は、ともにCLR上で動作するため、普通に考えれば、両者のパフォーマンスに差はないものと思われます。 しかしながら、本当にそうであるのか、ILベースで見てみようと思って、やってみました。

お題: VB.NETの"IIF"関数と、C#の"?"演算子を比較する[環境は2003]
参考文献:
C#&VB.NET比較ガイド―Converting code from one language to anotherJose Mojica, デジタルアドバンテージ
プログラミングMicrosoft .NET Framework Jeffery Richter, 吉松 史彰


準備したVB.NET
    Sub Main()
        Dim Target1 As Integer = 10
        Dim Target2 As Integer = 20

        Console.WriteLine(IIf(Target1 >= Target2, "Grator or Equal", "Lesser"))

    End Sub
準備したC#
		static void Main(string[] args){

			int Target1 = 10;
			int Target2 = 20;

			Console.WriteLine( Target1>=Target2 ? "Grator or Equal" : "Lesser");

		}
出力されたIL−VB.NET−に対する感想
    	ふにゃ?なんかややこしいことしてるぞ。
    	出力予定文字列をストアして、オブジェクトを二つばかし呼んでる。
    	こりゃ遅そうだ。
    	 
出力されたIL−C#−に対する感想
    	 ほうほう、IF文の出力結果とそっくり。CLR上でのネイティブ状態ですな。
     	 


考察:
C#は"?"演算子をIF文のように展開し、全てはIL内で完結します。このため、実行速度としてみた時には変わりはありません。
これに対し、VB.NETでは、他のオブジェクトを派手目に呼び出しています。これでは、IIFを使用すれば実行速度が落ちるのは当然ですね。
念の為
本稿の内容は、私個人の知的好奇心を満たすために行ったものです。
実際のコーディングでは、私は"?"演算子、"IIF"関数共に、使用は推奨すべきでないと思っています。それは可読性の問題です。 これについては、稿を改めることとします。

もどる