OVH Cloud OVH Cloud

Optimisation de la concatenation du StringBuilder

2 réponses
Avatar
Gilles TOURREAU
Salut tout le monde !

Est ce que ce code est correct ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi" + uneAutreChaine);


Ou faut-il mieux écrire ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi");
s.Append(uneAutreChaine);

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable informatique
gilles.tourreau@pos.fr

Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr

2 réponses

Avatar
Arnaud CLERET
Le deuxième cas est certes plus propres même si à mon avis l'exemple est ici
mal choisi. L'utilisation du StringBuilder est en général faite dans le cadre
des boucles "for, foreach ...", dans le cas de votre exemple un simple
string.Format serait suffisant (même si cette méthode fait appel en interne à
l'objet StringBuilder). On obtiendrait :

-----
string result = string.Format("Bonjour {O} {1} ...",Titre,NomComplet)
--

arno - http://www.dotnetguru2.org/acleret/


"Gilles TOURREAU" a écrit :

Salut tout le monde !

Est ce que ce code est correct ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi" + uneAutreChaine);


Ou faut-il mieux écrire ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi");
s.Append(uneAutreChaine);

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr





Avatar
Paul Bacelar
Comme le compilateur et le JIT intègre des optimisateurs, je ne me prendrais
pas trop la tête avec cela.

Je ferais juste un test de performance avec les deux versions dans un
environnement typique d'utilisation pour connaître la meilleur (si il y en a
une).

Dans l'absolu, j'ai une préférence pour la deuxième version qui me semble
éliminer l'utilisation d'une variable intermédiaire de type string .

Mais les optimisateurs sont généralement beaucoup plus malin que moi et il
faut donc raisonner sur le résultat de la compilation plutôt que sur le
source.

Pensez à la première règle de toute optimisation, n'optimisez que ce qui a
besoin d'être optimisé.

Les profilers permettent de respecter cette règle et évite de perdre du
temps en optimisations de bouts de chandelle.

Si les tests sur le cas d'utilisation que vous montrez exhibe une net
différence de performance, je pense que certain d'entre nous vont rapidement
implémenter une règle dans FxCop pour que toute utilisation de l'opérateur +
entre 2 strings paramètres de la méthode StringBuilder.Append engendre une
alerte en post-compilation. Cela permettra de rapidement détecter les
"erreurs" dans les sources des projets.
--
Paul Bacelar
MVP VC++


"Gilles TOURREAU" wrote in message
news:
Salut tout le monde !

Est ce que ce code est correct ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi" + uneAutreChaine);


Ou faut-il mieux écrire ?

StringBuilder s;
string uneAutreChaine = "Une autre chaine";

s = new StringBuilder("Blabla");

s.Append("Titi");
s.Append(uneAutreChaine);

En vous remerciant par avance de vos lumières...

Cordialement

--
Gilles TOURREAU
Responsable informatique


Société P.O.S
Spécialiste en motoculture depuis + de 30 ans !
http://www.pos.fr