Olá amigos desenvolvedores, nesse artigo irei mostrar a vocês como melhorar e otimizar seu código na concatenação de Strings, e como você pode usar o objeto StringBuilder.
Crie um novo projeto do tipo "Windows Forms" e no form principal arraste dois botões e nomeie-os de "btnConcat" e "btnSB" e troque a propriedade "Text" para "Concatenação" e "StringBuilder", respectivamente. Agora adicione um label com o nome lblResult. Pronto, sua tela está criada, vamos agora para o próximo passo.
Clique duas vezes no btnConcat e para seu método de clique adicione o seguinte código:
private void btnConcat_Click(object sender, EventArgs e)
{
string str = string.Empty;
DateTime inicial = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
str = str + i.ToString();
}
TimeSpan resultado = DateTime.Now - inicial;
lblResult.Text = resultado.Milliseconds.ToString();
}
Neste código, estamos concatenando 1000 strings com o operador "+=", e obtendo o tempo que é necessário para esta operação, em milisegundos.
Agora, faça o mesmo para o btnSB, mas com o seguinte código:
private void btnSB_Click(object sender, EventArgs e)
{
StringBuilder str = new StringBuilder();
DateTime inicial = DateTime.Now;
for (int i = 0; i < 10000; i++)
{
str.Append(i.ToString());
}
TimeSpan resultado = DateTime.Now - inicial;
lblResult.Text = resultado.Milliseconds.ToString();
}
Neste código, estamos fazendo o mesmo, só que usando o objeto StringBuilder para fazer a concatenação.
Compile seu projeto, clique nos dois botões e verifique o tempo gasto em cada uma das operações.
Impressionante não é mesmo? O StringBuilder é bem mais rápido do que a concatenação de strigs com "+=",agora você deve estar com uma dúvida do porquê disso tudo.
A resposta é que toda vez que que você concatena uma string, um novo objeto é criado na memória, então no primeiro caso você criaria 10000 vezes o objeto na memória pois o objeto string é imutável (não se pode alterar o valor após ter sido criado), já com o StringBuilder, os valores adicionados estarão alocados em um único lugar da memória.
Espero ter ajudado a todos, segue um link para que vocês aprendam mais sobre o StringBuilder: http://msdn.microsoft.com/ptbr/library/2839d5h5(VS.90).aspx
Abraços, Thiago Coelho!