Tidak ada perbedaan dari sudut pandang kinerja dan kode yang dihasilkan. Dalam pengujian kinerja, mereka bolak-balik di antara yang satu lebih cepat vs yang lain, dan hanya dalam milidetik.
Dalam melihat kode di balik layar, Anda juga tidak melihat perbedaan. Satu-satunya perbedaan adalah pada IL, yang string.Empty
menggunakan opcode ldsfld
dan""
menggunakan opcode ldstr
, tetapi itu hanya karena string.Empty
statis, dan kedua instruksi melakukan hal yang sama. Jika Anda melihat perakitan yang diproduksi, itu persis sama.
Kode C #
private void Test1()
{
string test1 = string.Empty;
string test11 = test1;
}
private void Test2()
{
string test2 = "";
string test22 = test2;
}
Kode IL
.method private hidebysig instance void
Test1() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test1,
[1] string test11)
IL_0000: nop
IL_0001: ldsfld string [mscorlib]System.String::Empty
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test1
.method private hidebysig instance void
Test2() cil managed
{
// Code size 10 (0xa)
.maxstack 1
.locals init ([0] string test2,
[1] string test22)
IL_0000: nop
IL_0001: ldstr ""
IL_0006: stloc.0
IL_0007: ldloc.0
IL_0008: stloc.1
IL_0009: ret
} // end of method Form1::Test2
Kode perakitan
string test1 = string.Empty;
0000003a mov eax,dword ptr ds:[022A102Ch]
0000003f mov dword ptr [ebp-40h],eax
string test11 = test1;
00000042 mov eax,dword ptr [ebp-40h]
00000045 mov dword ptr [ebp-44h],eax
string test2 = "";
0000003a mov eax,dword ptr ds:[022A202Ch]
00000040 mov dword ptr [ebp-40h],eax
string test22 = test2;
00000043 mov eax,dword ptr [ebp-40h]
00000046 mov dword ptr [ebp-44h],eax