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:
- 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.
- 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 < 10000; i++)
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 < 100000; i++)
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
Also View
_____
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)
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!
Gui,
parabéns pelo artigo.
Nunca tinha pensado nisso, foi bom saber!
Abraços
Obrigado!
[…] C# – StringBuilder vs Concatenation […]
[…] C# – StringBuilder vs Concatenation […]
[…] C# – StringBuilder vs Concatenation […]
[…] C# – StringBuilder vs Concatenation […]