Existe-t-il une différence de performances notable entre l'utilisation de l'interpolation de chaîne:
myString += $"{x:x2}";
vs String.Format ()?
myString += String.Format("{0:x2}", x);
Je demande seulement parce que Resharper demande le correctif, et j'ai déjà été dupé.
c#
string
performance
resharper
string-interpolation
Krythique
la source
la source
Réponses:
Remarquable est relatif. Cependant: l'interpolation de chaîne est transformée en
string.Format()
lors de la compilation, donc ils devraient aboutir au même résultat.Il existe cependant des différences subtiles: comme nous pouvons le constater à partir de cette question, la concaténation de chaînes dans le spécificateur de format entraîne un
string.Concat()
appel supplémentaire .la source
int
est utilisé).var a = "hello"; var b = $"{a} world";
compile en concaténation de chaînes.var a = "hello"; var b = $"{a} world {1}";
compile au format chaîne.l'interpolation de chaîne est transformée en string.Format () au moment de la compilation.
Également dans string.Format, vous pouvez spécifier plusieurs sorties pour un seul argument et différents formats de sortie pour un seul argument. Mais l'interpolation de chaîne est plus lisible, je suppose. C'est à vous de répondre.
Il y a quelques résultats de tests de performance https://koukia.ca/string-interpolation-vs-string-format-string-concat-and-string-builder-performance-benchmarks-c1dad38032a
la source
String::Format
. et parfois dansString::Concat
. Et le test de performance sur cette page n'est pas vraiment significatif: la quantité d'arguments que vous passez à chacune de ces méthodes dépend. concat n'est pas toujours le plus rapide, le constructeur de chaînes n'est pas toujours le plus lent.La question portait sur les performances, mais le titre dit simplement "vs", donc j'ai le sentiment de devoir ajouter quelques points de plus, certains d'entre eux étant cependant avisés.
Localisation
string.Format
. Cependant, il existe des outils pour cela (par exempleReSharper
).Maintenabilité (mon avis)
string.Format
est beaucoup plus lisible, car il se concentre sur la phrase que je voudrais exprimer, par exemple lors de la construction d'un message d'erreur agréable et significatif. L'utilisation des{N}
espaces réservés me donne plus de flexibilité et il est plus facile de le modifier plus tard.string.Format
est beaucoup moins enclin à cela.Donc, sur la base de ceux-ci, j'ai décidé de m'en tenir
string.Format
à la plupart de mon code. Cependant, j'ai préparé une méthode d'extension pour avoir une manière plus fluide de coder que j'aime beaucoup plus. L'implémentation de l'extension est une ligne unique, et elle ressemble simplement à ceci en cours d'utilisation.L'interpolation est une excellente fonctionnalité, ne vous méprenez pas. Mais IMO, il brille le mieux dans les langages qui manquent la
string.Format
fonctionnalité -like, par exemple JavaScript.la source
{3}
c'est X ou Y, surtout si vous commencez à réorganiser votre format. Exemple Madlibs:$"It was a {adjective} day in {month} when I {didSomething}"
vsstring.Format("It was a {0} day in {1} when I {2}", adjective, month, didSomething)
->$"I {didSomething} on a {adjective} {month} day"
vsstring.Format("I {2} on a {0} {1} day", adjective, month, didSomething)
string.Format
je pense que vous êtes beaucoup moins sujet à ce problème. Mais de toute façon, c'est pourquoi j'ai souligné que c'était mon avis :)