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!