我读过一些关于 String.Empty 与 "" 的文章,我也自己做了测试。它们之间的区别如下。
字符串.空
L_0001: ldsfld string [mscorlib]System.String::Empty
""
L_0001: ldstr ""
在我与朋友交谈后,他们认为 String.Empty 比 "" 更快,因为在幕后(在汇编级别)ldstr 比 ldsfld 多做 1 个圆圈。 (我不记得使它们不同的步骤)
我想知道如何检查这方面的性能。
The ldsfld
操作将静态字段的值推送到计算堆栈上,而ldstr
推送对元数据字符串文字的引用。
性能差异(如果有的话)将是最小的。新版本的编译器实际上替代了""
for String.Empty
.
您还应该考虑代码的可读性和可维护性。使用String.Empty
更清楚的是,您实际上指的是一个空字符串,而不仅仅是忘记在字符串文字中输入某些内容。
Edit:
我查看了创建的本机代码。
C# 3,发布模式,x86:
string a = String.Empty;
0000002a mov eax,dword ptr ds:[0356102Ch]
0000002f mov dword ptr [ebp-8],eax
string b = "";
00000032 mov eax,dword ptr ds:[0356202Ch]
00000038 mov dword ptr [ebp-0Ch],eax
C# 3,发布模式,x64:
string a = String.Empty;
0000003b mov rax,12711050h
00000045 mov rax,qword ptr [rax]
00000048 mov qword ptr [rsp+28h],rax
string b = "";
0000004d mov rax,12713048h
00000057 mov rax,qword ptr [rax]
0000005a mov qword ptr [rsp+30h],rax
所以,最终代码是相同的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)