Melhorando performance com Strings
Aprenda a otimizar seu código com o uso do objeto StringBuilder.
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!
Related articles
Avoid hackers and crackers from submitting data to your system by creating your captcha
Step by step here with me
How to get data from AppSettings.json?
In practice, many ways to do it.
Thiago Martins Coelho