L'opération ldsfld
pousse la valeur d'un champ statique sur la pile d'évaluation, tandis que ldstr
pousse une référence à une chaîne de caractères littérale de métadonnées.
La différence de performance (s'il y en a) serait minime. Les nouvelles versions du compilateur remplacent en fait ""
par String.Empty
.
Vous devriez également considérer la lisibilité et la maintenabilité du code. En utilisant String.Empty
, il est plus clair que vous voulez réellement dire une chaîne vide et que vous n'avez pas simplement oublié de saisir quelque chose dans la chaîne littérale.
Éditer:
J'ai jeté un coup d'œil au code natif créé.
C# 3, mode release, 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, mode release, 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
Ainsi, en fin de compte, le code est identique.