Bonjour,
Suite à une étude sur les meilleurs pratiques autour des chaines de caractères, j'en ai conclu que l'opérateur "+" était une très bonne chose. A savoir :
- Les litteraux sont concaténés à la compilation
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 string s1 = "Cette Chaine sera concaténée " + "lors de la compilation. L'utilisation " + "du \"+\" augmente la lisibilité.";- Les autres concatenations sont remplacées par un String.Concat qui est très performant. Ce qui signifie que ce code
génère exactement le même MSIL que le code suivant.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 string s1 = "Toutes les "; string s2 = "chaines sont "; string s3 = "connues avant "; string s4 = "l'operation de "; string s5 = "concatenation "; string s6 = s1 + s2 + s3 + s4 + s5 ;a savoir, génération d'un tableau de string (car au dela de 4 arguments String.Concat passe par un tableau), puis appel a String.Concat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 string s1 = "Toutes les "; string s2 = "chaines sont "; string s3 = "connues avant "; string s4 = "l'operation de "; string s5 = "concatenation "; string s6 = String.Concat(s1, s2, s3, s4, s5);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 IL_0187: ldc.i4.5 IL_0188: newarr [mscorlib]System.String IL_018d: stloc.s CS$0$0000 IL_018f: ldloc.s CS$0$0000 IL_0191: ldc.i4.0 IL_0192: ldloc.s s1 IL_0194: stelem.ref IL_0195: ldloc.s CS$0$0000 IL_0197: ldc.i4.1 IL_0198: ldloc.s s2 IL_019a: stelem.ref IL_019b: ldloc.s CS$0$0000 IL_019d: ldc.i4.2 IL_019e: ldloc.s s3 IL_01a0: stelem.ref IL_01a1: ldloc.s CS$0$0000 IL_01a3: ldc.i4.3 IL_01a4: ldloc.s s4 IL_01a6: stelem.ref IL_01a7: ldloc.s CS$0$0000 IL_01a9: ldc.i4.4 IL_01aa: ldloc.s s5 IL_01ac: stelem.ref IL_01ad: ldloc.s CS$0$0000 IL_01af: call string [mscorlib]System.String::Concat(string[])
De plus, String.Concat (donc l'operateur "+" également) s'execute deux fois plus rapidement qu'un String.Format ou qu'un StringBuilder, et utilise également deux fois moins de mémoire que ces deux instructions (PerfView).
En ce qui me concerne l'histoire devrait s'arretter la : l'operateur "+" n'est pas contre-indiqué, voir même mieux que les autres. Mais il parrait que Mr Microsoft déconseille son utilisation, et que Mr Resharper le remplace par String.Format() parce qu'il serait le saint graal de la performance .
Donc si un expert pouvait, soit, confirmer mes observations, soit, expliquer où je me trompe, ce serait super sympa.
Partager