/ / Différence entre la méthode append de la classe StringBulder et l'opérateur de concaténation «+» [dupliquer] - c #

Différence entre l’utilisation de la méthode append de la classe StringBulder et de l’opérateur de concaténation «+» [duplicate] - c #

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 № 1

Tout 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.