Developing

Introduction

Esses dias estive pensando:

“O que é mais rápido: Utilizar StringBuilder ou Concatenar as Strings?”.

Então resolvi fazer alguns teste para ver qual método é o mais eficiente, StringBuilder ou Concat String.

String Concatenation

A concatenação de strings  é uma das operações mais utilizadas por todos os desenvolvedores. Porém, a má utilização dela no .NET pode resultar em perda de desempenho.

No .Net temos duas (principais) formas de concatenar string:

  1. Adicionando uma nova string à uma já existente. No .NET Framework quando você adiciona uma nova string para uma string existente, o Framework copia as duas strings, a nova e a antiga, para a memória, faz a leitura e armazena em outra string.
  2. Utilizando a classe StringBuilder. O StringBuilder fornece o método Apend que insere uma nova string na string existente.

Comparing

Para demonstrar a comparação, fiz um programa que mostra a hora em que os processos foram iniciados e a hora em que os mesmos foram encerrados. Veja o código abaixo em C#.

// Concatenação usando string
// Concatenation using string
Console.WriteLine("---------- String Concatenation ----------");

string str = string.Empty;
DateTime startTime = DateTime.Now;

Console.WriteLine("Inicio:" + startTime.ToString());

for (int i = 0; i < 10; i++)
    str += i.ToString();

DateTime stopTime = DateTime.Now;

Console.WriteLine("Fim:" + stopTime.ToString());

// Concatenação usando StringBuilder
// Concatenation using StringBuilder
Console.WriteLine("\n-------------- StringBuilder -------------");

StringBuilder builder = new StringBuilder();
startTime = DateTime.Now;

Console.WriteLine("Inicio:" + startTime.ToString());
for (int i = 0; i < 10; i++)
    builder.Append(i.ToString());

stopTime = DateTime.Now;

Console.WriteLine("Fim:" + stopTime.ToString());

Console.ReadLine();

Ao executar o código notará que não há diferença entre o tempo que ambos executarão. Mas note que foram feitas apenas 10 concatenações. Para notarmos a direferença de desempenho altere as linhas XX e YY para:

for (int i = 0; i &lt; 10000; i++)
StringBuilder_vs_Concatenation

A second difference betwen StringBuilder and String Concatenation

Veja que houve uma diferença de 1 segundo no tempo que levaram para executar a tarefa. Agora altere as mesmas linhas para:

for (int i = 0; i &lt; 100000; i++)
StringBuilder_vs_Concatenation

The big difference betwen StringBuilder and String Concatenation

Note a enorme diferença no tempo em que os processos levaram para finalizar sua execução.

Conclusion

Toda vez que juntamos duas strings usando o operador +, uma nova string é alocada na memória e usada para formar a nova string. Então, se concatenarmos 100 vezes uma string usando o operador ‘+’, serão 100 novas alocações em memória. Já no caso do StringBuilder, apenas uma alocação.

Caso seja necessário concatenar uma string mais de 10 vezes, procure usar o StringBuilder para ganhar um pouco mais de desempenho na aplicação.

Observations

O programa foi executado em uma máquina Core2Duo 2.0GHz com 2GB de memória e Win XP.

References

Using the StringBuilder Class

Also View

C# – ReadOnly CheckBox

C# – Change ProgressBar Color

C# – SplitContainer

_____

Não se esqueça de deixar seu comentário, critica, elogio, dúvida e etc. Ele é muito importante para a melhoria do blog.
Do not forget to leave your comments, criticism, praise, questions, etc.. It is very important for improving the blog.

Comments on: "C# – StringBuilder vs Concatenation" (8)

  1. Muito bom Guilherme, apreciei muito este post e com certeza irei usar StringBuilder mais vezes.

    Gostaria de lhe fazer uma pergunta sobre C#, pode ser aqui no seu blog ou prefere em outro lugar?

    Abraços.
    silvio

    • Obrigado Silvio!

      Pode ser da maneira que preferir. Mas caso você abra a pergunta no forum C# da MSDN eu e outros colaboradores poderão te auxiliar na solução. Pois às vezes não tenho tempo de buscar uma solução, então outros usuários poderão te dar esse apoio.

      Como ficou ou como está o andamento com o gráfico? Está faltando alguma coisa?

      Abraços!

  2. Gui,
    parabéns pelo artigo.
    Nunca tinha pensado nisso, foi bom saber!

    Abraços

  3. […] C# – StringBuilder vs Concatenation […]

  4. […] C# – StringBuilder vs Concatenation […]

  5. […] C# – StringBuilder vs Concatenation […]

  6. […] C# – StringBuilder vs Concatenation […]

Leave a reply to C# – Fatorial « Guilherme Ferrera Cancel reply