Les réponses précédentes étaient correctes pour .NET 1.1 (regardez la date de l'article qu'ils ont lié : 2003). À partir de .NET 2.0 et plus, il n'y a plus de différence. Le JIT finira par référencer le même objet sur le tas de toute façon.
Selon la spécification C#, section 2.4.4.5 : http://msdn.microsoft.com/en-us/library/aa691090(VS.71).aspx
Chaque littéral de chaîne ne donne pas nécessairement lieu à une nouvelle instance de chaîne. Lorsque deux littéraux de chaîne ou plus qui sont équivalents selon l'opérateur d'égalité de chaîne (section 7.9.7) apparaissent dans le même assemblage, ces littéraux de chaîne font référence à la même instance de chaîne.
Quelqu'un en parle même dans les commentaires du billet de Brad Abram.
En résumé, le résultat pratique de "" contre String.Empty est nul. Le JIT finira par s'en rendre compte.
Personnellement, j'ai découvert que le JIT est bien plus intelligent que moi et j'essaie donc de ne pas être trop malin avec des optimisations de micro-compilateur comme celles-ci. Le JIT déploie les boucles for(), supprime le code redondant, inline les méthodes, etc. mieux et à des moments plus appropriés que le compilateur C# ou moi-même ne pourrions jamais anticiper. Laissez le JIT faire son travail :)
6 votes
La vraie question n'est PAS ce que plutôt pourquoi . Pourquoi Microsoft a créé
string.Empty
et quel était le raisonnement derrière le fait de le déclarer commereadonly
au lieu deconst
.