在我的平台上,使用 VS 2010 为 .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