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!