La concaténation : Qu'est ce que c'est ?

Concaténer, c'est mettre bout à bout quelque chose, en programmation, on concatène des mots, des string comme ceci:

string maValeur = "Ma Valeur 1";
maValeur = maValeur + ", Ma Valeur 2";
maValeur = maValeur + ", Ma Valeur 3";

//Ce qui donne:
//Ma Valeur 1,Ma Valeur 2,Ma Valeur 3

Alors c'est très bien quand on a juste une toute petite concaténation, mais quand on fais une boucle comme ceci:

string maValeur = null;
//Une boucle de 100.000 concaténations
for(int i=0; i < 100000; i++)
{
    maValeur = maValeur + ",Ma Valeur " + i;
}

20 secondes et 768 Millisecondes ! (00:20.768) A EVITER ! Les performances ne sont pas du tout optimales !

Pourquoi ?

En utilisant ce genre de concaténation avec des string, à chaque fois vous alloué de l'espace mémoire pour chaque string ajouté, et en plus si vous désirez modifier ou manipuler cette variable, c'est vraiment pas performant du tout ! Microsoft sachant cela à inventer le StringBuilder ! String et Builder pour construction de string.

Le StringBuilder

L'objet StringBuilder s'utilise très simplement:

StringBuilder maValeur = new StringBuilder();
//Une boucle de 100.000 concatènations
for(int i=0; i < 1000000; i++)
{
    maValeur.Append("Ma Valeur ").Append(i).Append(",");
}

Et Paf ! 6 Millisecondes ! (00:00.006)

Comme vous pouvez le remarquer, l'objet StringBuilder fait la même chose mais 1000 fois plus rapide et sans prendre trop de mémoire ! Il suffit d'utiliser la méthode Append.

De plus le StringBuilder permet de manipuler le string comme vous le voulez:

Méthode Description
StringBuilder.Append Concatène un élément string à la fin de la valeur déjà contenue dans le StringBuilder
StringBuilder.AppendFormat Concatène un élément string à la fin de la valeur déjà contenue dans le StringBuilder mais en y ajoutant la possibilité de le formater avec les indices {x}
StringBuilder.Insert(start, "Valeur") Ajoute un élément string à une position précise de la valeur déjà contenue dans le StringBuilder
StringBuilder.Remove(start, longueur) Enlève un nombre de caractère dans la valeur déjà contenue du StringBuilder d'une position précise jusqu'une certaine longueur.

AppendFormat

Vous pouvez utilisez le StringBuilder de la même façon que vous utilisez le string.Format(), comme ceci:

StringBuilder maValeur = new StringBuilder();
int maLigne = 1000;
for(int i=0; i < 1000; i++)
{
    maValeur.AppendFormat("Ma Valeur {0} est la valeur de la ligne {1},", i, maLigne);
    maLigne++;
}

Vous passez à l'indice 0 -> i et à l'indice 1 -> maLigne

Insert

Pour insérer précisément un autre string dans le StringBuilder, rien de plus facile:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Mon chien se promène dans le jardin.");
maValeur.Insert(10,"et ma chatte ");
maValeur.Insert(33,"nt");

//Résultat: Mon chien et ma chatte se promènent dans le jardin.

Remove

Pour enlever des caractères, toujours aussi simple:

StringBuilder maValeur = new StringBuilder();
maValeur.Append("Mon chien se promène dans le jardin.");
maValeur.Insert(10,"et ma chatte ");
maValeur.Insert(33,"nt");
maValeur.Remove(35, 15);

//Résultat: Mon chien et ma chatte se promènent.

Habituez vous à utiliser le StringBuilder plutôt que des concaténations de string, vous y gagnerez en performance, croyez-moi !

De plus cela a été approuvé par Chuck Norris: