Quelle est la différence entre l'utilisation de la méthode d'ajout de la classe StringBuilder et la concaténation à l'aide de l'opérateur "+"?
De quelle manière la méthode Append fonctionne-t-elle efficacement ou plus rapidement que l'opérateur "+" en concaténant deux chaînes?
Réponses:
5 pour la réponse № 1Tout d'abord, String
et StringBuilder
sont des classes différentes.
String
la classe représente types immuables mais StringBuilder
classe représente les types mutables.
Lorsque vous utilisez +
pour enchaîner vos cordes, il utilise String.Concat
méthode. Et chaque fois, il retourne un nouvel objet string.
StringBuilder.Append
méthode ajoute un copie de la chaîne spécifiée. Il ne retourne pas une nouvelle chaîne, il change la chaîne originale.
Pour une partie efficace, vous devriez lire l’article de Jeff intitulé The Sad Tragedy of Micro-Optimization Theater
Il. Juste. Ça ne compte pas!
Nous ne connaissons déjà aucune de ces opérations seraeffectué en boucle, afin que nous puissions exclure brutalement pauvre caractéristiques de performance de la concaténation de chaînes naïve. Tout ça "s la gauche est la micro-optimisation, et la minute où vous commencez à vous inquiéter de De toutes petites optimisations, vous vous êtes déjà trompé de chemin.
Oh, tu ne me crois pas? Malheureusement, je n’y ai pas cru moi-même, ce qui est pourquoi je me suis entraîné dans cette affaire en premier lieu. Voici mes résultats - pour 100 000 itérations, sur un Core 2 Duo double cœur 3,5 GHz.
1: Simple Concatenation 606 ms
2: String.Format 665 ms
3: string.Concat 587 ms
4: String.Replace 979 ms
5: StringBuilder 588 ms
0 pour la réponse № 2
Les chaînes de caractères sont immuables. Ainsi, lors de l’ajout, vous créez un nouvel objet en arrière-plan.
Lorsque vous utilisez StringBuilder
, il fournit une méthode efficace pour concaténer des chaînes.
Pour être honnête, vous ne remarquerez pas vraiment de grande amélioration si vous l'utilisez une ou deux fois. Mais l'efficacité intervient lorsque vous utilisez le StringBuilder
en boucles.
0 pour la réponse № 3
Lorsque vous concaténez deux chaînes, vous créez une nouvelle chaîne avec le résultat. StringBuilder a la possibilité de se redimensionner à mesure que vous y ajoutez, ce qui peut être plus rapide.
Comme avec toutes les choses, ça dépend. Si vous êtes simplement en train de concaténer deux petites chaînes comme ceci:
string s = "a" + "b";
Dans le meilleur des cas, il n'y aura pas de différence de performances, mais cela sera probablement plus rapide que d'utiliser un StringBuilder et sera également plus facile à lire.
StringBuilder est plus adapté aux cas où vous concaténez un nombre arbitraire de chaînes, que vous ne connaissez pas au moment de la compilation.