J'ai une situation où j'ai besoin de concaténer plusieurs chaînes pour former un ID d'une classe. Fondamentalement, je suis juste en boucle dans une liste pour obtenir les valeurs ToString des objets, puis les concaténer.Chaîne de concaténation vs String Builder. Performance
foreach (MyObject o in myList)
result += o.ToString();
La liste ne devrait pas avoir plus de 5 éléments (bien qu'il puisse, mais c'est un très cas marginal) et aura normalement de 1 à 3 éléments, étant communs pour qu'il y ait un seul ou deux.
Qu'est-ce qui serait le plus de performance, en conservant la concaténation ou en utilisant un StringBuilder?
StringBuilder bld = new StringBuilder()
foreach (MyObject o in myList)
bld.Append(o.ToString());
Je ne suis pas sûr si la création StringBuilder prendra plus de temps que la concaténation standard pour le cas le plus courant.
Ceci est paresseux, les éléments de la liste ne changent pas une fois créés afin que l'identifiant soit construit paresseusement une fois lorsqu'il est appelé.
En note ... Dois-je utiliser un tableau fixe au lieu d'une liste? Aurais-je une amélioration des performances ou de la mémoire si je le fais? (La liste est seulement utilisée comme IEnumerable de toute façon)
Une vue plus générale de la question pourrait être, combien de chaînes sont suffisantes pour arrêter la concaténation et commencer à construire?
Dois-je même prendre la peine de tester le scénario?
if (myList.Count > 4)
ConcatWithStringBuilder(myList);
Ce serait le cas idéal pour la micro-optimisation inanime. Ne même pas déranger à cette quantité de ficelles. –
Est-ce que la différence de temps en microsecondes possible vaut votre peine? Le temps qu'il vous a fallu pour écrire cette question est probablement plus que la différence entre concat/builder pendant la durée du programme. Surtout si c'est paresseux et seulement appelé une fois par exécution. –
Copie possible de [String vs. StringBuilder] (https://stackoverflow.com/questions/73883/string-vs-stringbuilder) – Matt