私のプラットフォームでは、VS 2010 for .NET 4 でコンパイルされたコード、IL DASM が表示されます
デバッグ
...
IL_0001: ldstr "test"
IL_0006: callvirt instance int32 [mscorlib]System.String::get_Length()
...
リリース
...
IL_0000: ldstr "test"
IL_0005: callvirt instance int32 [mscorlib]System.String::get_Length()
...
つまり、コンパイル時の最適化はありません。ただし、CLR ジッターはこれを最適化する場合があります。このような最適化の結果は、アセンブリ コードを見ることで確認できます。結果は次のとおりです。
私のプラットフォームでは、Release for platform でコンパイルされたコードx86
は実行時の比較を行っているように見え、ジッターはコードを最適化しませんでした。
私が使用したコード
class Program
{
static void Main(string[] args)
{
if ("test".Length == 4) { }
}
}
if
これは、ブロック用に生成されたアセンブリ コードの一部です。test
文字列の値はオンラインで比較されます17
。
if ("test".Length == 4)
00000000 push ebp
00000001 mov ebp,esp
00000003 sub esp,8
00000006 mov dword ptr [ebp-4],ecx
00000009 cmp dword ptr ds:[00148ED4h],0
00000010 je 00000017
00000012 call 5D664D0A
00000017 mov ecx,dword ptr ds:[035F2188h]
0000001d cmp dword ptr [ecx],ecx
0000001f call 5D4CA74B
00000024 mov dword ptr [ebp-8],eax
00000027 nop