Performance para concatenar texto

Enquanto desenvolve algum programa, é possível esquecer alguns detalhes que podem impactar quando este estiver completo. Isso ocorre principalmente quando ainda não se tem um domínio grande sobre a linguagem utilizada, mas claro que deslizes ocorrem por mais experiente que seja. Esse texto se aplica mais ao primeiro caso.

Concatenar texto

Ta ai uma tarefa que dependendo com o que você trabalha, quase nunca vai utilizar. Mas no geral, todo mundo tem que fazer, é uma das coisas mais básicas que existe.

Mas durante essa rotina, em grande parte das vezes, estamos concatenar pequenos texto, algumas palavras, ou mesmo letras. O problemas começa a aparecer quando a quantidade de caracteres que precisam ser concatenados aumenta. Ou pior; quando a capacidade de processamento, de quem vai ‘rodar’ o programa, é limitada. A tarefa, então, se torna pesada. Lidar com grande quantidades de texto com pouca capacidade de processamento e / ou memória, pode destruir a experiencia do usuário.

As formas mais comuns para realizar a tarefa de concatenar um texto seriam com um + em linguagens como C#, Java entre outras baseadas no C ou & como é utilizado no Visual Basic.

Porem, esses métodos padrões para concatenar, como disse acima, podem ser custosos  durante a execução de um programa.

Como melhorar a performance para concatenar texto

Para melhor entendermos o quão impactante e como melhorar a performance ao concatenar um texto, realizei testes medindo o tempo necessário (como mostrado nesse post aqui no hinfos) para concatenar 1000 (mil) vezes uma String, que consistia em 10 (dez) parágrafos gerados no Lorem Ipsum. Cada teste foi realizado 3 (três) vezes.

Foram gerados 10 parágrafos, 906 palavras e 6111 bytes de Lorem Ipsum

Realizei os teste no Visual Basic .NET e no C#. Utilizei para tanto, os métodos .Concat, do tipo String e .Append do tipo StringBuilder, para ambas as linguagens. Além da concatenação especifica de cada uma + e &, para C# e VB .NET, respectivamente.

Os resultados

Utilizando o padrão de cada linguagem: + e &

Observei que e, VB .NET, o tempo médio necessário foi de mais de 1 minuto e 10 segundos para executar a tarefa descrita. Já no C#, foi de pouco mais de 6 segundos.

Utilizando método .Concat

No VB .NET, houve o tempo médio aumentou para e 1min e 16s, enquanto que no C# caiu para 5s.

Utilizando método .Append

No VB .NET, o tempo médio ficou em 21 milissegundos, enquanto que no C# esse tempo foi de 15 milissegundos.

Finalizando

Podemos observar, que o métod .Append do tipo StringBuilder é muito mais rápido que as outras formas apresentadas. Isso ocorre, por conte como o tipo String funciona na memória, a cada nova concatenação que você realiza  numa String, um objeto novo é criado. Isso somado ao fato desse tipo não ser otimizado para concatenação, causa a lentidão na tarefa. Por outro lado, com StringBuilder, o objeto já está criado e novas String são adicionadas; ele também já é otimizado para concatenar várias String o que o torna ideal quando a tarefa exige que muitas Strings sejam unidas.

Mas cuidado ao utilizar o StringBuilder para não ficar preso nele e utiliza-lo até para concatenar “a” + “b” uma unica vez no programa. 🙂

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.