Olá.
Sempre que desenvolvemos um software, e ai não importa se é para web, windows ou
mobile, temos que nos preocupar com a performance da aplicação, existem softwares
que 1 segundo a mais em um processamento no final do mês ou do ano custa muito dinheiro.
E o assunto de concatenação de strings já foi discutido várias vezes, já cansei
de ler muitos artigos a respeito, mas vejo que muitos desenvolvedores não dão importância
ao assunto, é por isso que resolvi mostrar aqui a diferença de desempenho
concatenando strings de 4 formas diferentes.
Aqui não estou me preocupando e nem comparando o consumo de memória, se quiserem
posso fazer um artigo comparando isso também.
Basicamente o teste é concatenar 20.000 vezes uma string, eu sei, ninguém tem isso
em um sitema ( eu espero ), mas utilizei esse número porque assim conseguiremos
ver realmente o que interessa, que é desempenho.
Então chega de falar e vamos ao que interessa.
“a” + “b”
Concatenação de strings do tipo, “Márcio” + “Fábio” é a que mais vejo o pessoal
fazendo, eu não gosto, apesar dela ser mais rápida que a segunda opção, eu acho
muito ruim ler código com strings concatenadas dessa forma, o código abaixo é o
de teste para essa concatenação.
01
|
var cronometro = new Stopwatch();
|
04
|
var resultado = string.Empty;
|
05
|
for (int
i = 0; i < 20000; i++)
|
07
|
resultado +=
i + "-" + i;
|
12
|
ResultadoStringMaisString.Text = cronometro.Elapsed.TotalSeconds.ToString();
|
string.Format()
string.Format(“Idade {0}”, 26) é assim que eu costumo utilizar, para concatenar
strings pequenas, apesar de ter um desempenho menor que “a” + “b”, o código fica
muito mais fácil de entender. O código abaixo é o teste para essa concatenação.
01
|
var cronometro = new Stopwatch();
|
04
|
var resultado = string.Empty;
|
05
|
for (int
i = 0; i < 20000; i++)
|
07
|
resultado +=
string.Format("{0} - {0}", i);
|
12
|
ResultadoStringFormat.Text = cronometro.Elapsed.TotalSeconds.ToString();
|
StringBuilder().Append()
Agora a brincadeira fica legal, sempre, novamente, sempre que precisar concatenar
várias strings, um ex: quem ainda trabalha com ADO.NET puro, e escreve SQL´s gigantes,
fica quebrando linha no Visual Studio para entender o código, e utiliza “a” + “b”,
utilize a classe StringBuilder, e nela concatene com o método Append(). O código
abaixo é o teste para essa concatenação.
01
|
var cronometro = new Stopwatch();
|
04
|
var resultado = new StringBuilder();
|
05
|
for (int
i = 0; i < 20000; i++)
|
07
|
resultado.Append(i
+ "-" + i);
|
12
|
ResultadoStringBuilderAppend.Text = cronometro.Elapsed.TotalSeconds.ToString();
|
StringBuilder.AppendFormat()
Trabalhando com a classe StringBuilder, também temos um método para concatenar como
fazemos com o string.Format(), que é o método AppendFormat(), também considero que
a concatenação fica mais fácil de entender, mas novamente, o AppendFormat() tem
o desempenho menor que o Append(). O código abaixo é o teste para essa concatenação.
01
|
var cronometro = new Stopwatch();
|
04
|
var resultado = new StringBuilder();
|
05
|
for (int
i = 0; i < 20000; i++)
|
07
|
resultado.AppendFormat("{0} - {0}", i);
|
12
|
ResultadoStringBuilderAppendFormat.Text = cronometro.Elapsed.TotalSeconds.ToString();
|
Em todos os testes eu utilizei a classe Stopwatch que fica no namespace System.Diagnostics
para marcar o tempo de execução, os resultados serão mostrados em segundos.
Bom na imagem vemos que a diferença no tempo de execução é incrível, então fica
a dica, verifique aquele monte de string concatenada no seu software, e utilize
StringBuilder.
No próximo post vou mostrar porque essa diferença ocorre, vamos entender melhor
sobre o tipo string, e porque utilizando StringBuilder a diferença é tão grande.
O código fonte do aplicativo está disponível para download.