Você concatena strings com concatenação comum ou usa o StringBuilder?
Há alguns dias fui questionado sobre isso e na hora me veio a idéia de fazer um teste para comparação.
Conceitos
StringBuilder: http://msdn.microsoft.com/en-us/library/2839d5h5(v=VS.100).aspx
String: http://msdn.microsoft.com/en-us/library/362314fe(v=VS.100).aspx
Vamos ao Teste
Fiz um pequeno programa que simula uma grande quantidade de concatenações ou appends em StringBuilders. A idéia é um bloco for que concatena uma string várias vezes e outro bloco for que faz vários appends em um StringBuilder. Algo desse tipo:
// Várias concatenações na string string str = string.Empty; for (int i = 1; i <= qt; i++) str = str + " Concatenação nº " + i.ToString(); // Vários appends no StringBuilder StringBuilder stb = new StringBuilder(); for (int i = 1; i <= qt; i++) { stb.Append(" Append nº "); stb.Append(i.ToString()); }
O resultado foi de impressionar. Veja:
No teste, executei 100.000 concatenações/appends, e o tempo de execução das concatenações foi absurdamente maior que o tempo de execução dos appends.
Portanto, a partir de agora, use StringBuilder em vez de strings comuns.
O código fonte pode ser baixado aqui.
Valeu galera!
João Paulo
Jan 04, 2011 @ 07:14:01
Muito bom, também estava com dúvida sobre qual das duas opções seria a melhor, agora já sei. Ótimo post =)
1000TON
Jan 04, 2011 @ 12:31:28
Realmente a diferença é brutal. A forma de trabalho das string faz com que a mesma seja mais lerda, isso pq toda hora q concatenamos o compilador gera um novo array de chair com o tamanho final (antigo + tamanho concatenado), migra todo o conteúdo do array antigo para este novo, insere o novo conteúdo e destrói o array antigo.
Eu uso sempre StringBuilder para gerar strings é a melhor solução…
Por que usar StringBuilder? « Fernando Ottoboni
Jan 05, 2011 @ 19:30:37
marcobaccaro
Ago 03, 2011 @ 20:30:43
Essa diferença no custo da concatenação é devido o objeto string ser imutável.Nesse post (http://marcobaccaro.wordpress.com/2011/02/27/objetos-imutaveis/) eu explico esse conceito, que é o motivo desse custo que você postou.
Fernando Ottoboni
Ago 03, 2011 @ 20:39:46
Também postei a explicação em outro post: https://ferottoboni.wordpress.com/2011/01/05/por-que-usar-stringbuilder/
Downloads do blog via 4Shared « Fernando Ottoboni
Jul 13, 2012 @ 15:54:29