Performance com C# – Manipulação de Strings

E aí galera! Tudo certo?

Hoje vou falar mais um pouquinho sobre performance com C#, e o assunto é a manipulação de strings; sem mais delongas, vamos ao que interessa!

Pra início de conversa

String, nada mais é do que uma sequência de caracteres unicode. “Ahhh, mas isso todo mundo sabe!”, verdade, mas você sabia que toda vez que você altera uma string, na verdade você está remontando ela novamente? Ou seja, toda vez que fazemos uma concatenação, uma nova string é criada, e a antiga é “jogada fora” e fica pro Garbage Collector dar um jeito. Isto posto, já é um motivo para se atentar quando o assunto é manipulação de strings.

Realizei testes com strings nos seguintes cenários:

  • Comparação entre duas strings, utilizando os métodos “Equals“, “Compare” e o bom e velho “==”;
  • Verificação de string vazia, nula ou com espaços em branco, utilizando os métodos: “IsNullOrEmpty“, “IsNullOrWhiteSpace” e também comparando manualmente com nulo e vazio;
  • Concatenação de grandes textos, com número indefinido de concatenações, utilizando: “string.Concat“, “string.Join“, “+” e também com “StringBuilder“;
  • Concatenação de pequenos textos, com número definido de concatenações, utilizando: “string.Concat“, “string.Join“, “+”, “StringBuilder” e também usando interpolação;
  • Formatação, utilizando: “string.Format“, “ToString” e também interpolação;
Testes

Para a comparação entre duas strings, foi utilizado um código semelhante ao seguinte:
ComparacaoCodigo

Podemos perceber que a utilização do “==” leva vantagem em comparação aos demais, porém o “Equals” compara conteúdo de variáveis que trabalham por referência, caso de um StringBuilder, por exemplo, e ambos levam vantagem sobre o “Compare“, veja:
ComparacaoStrings

Para a verificação de string nula ou vazia foi utilizado um código semelhante ao seguinte:
ComparacaoVazioCodigo

Podemos perceber que a utilização do “IsNullOrEmpty” leva vantagem aos demais, mas nada tão significante, lembrando que este não verifica se a string tem somente espaços em branco, aí sim é o caso de usar o método “IsNullOrWhiteSpace“, então existem casos e casos, mas prefira usar o método “IsNullOrEmpty“, veja:
ComparacaoVazio

Para a concatenação com quantidade indefinida de itens, foi utilizado um código semelhante ao seguinte:
ConcatenacaoGrandesTextosCodigo

Podemos perceber que a utilização do “string.Join” e do “StringBuilder” levam vantagem consideravelmente em relação aos demais, porém o “StringBuilder” leva vantagem em questões de consumo de memória e processamento, veja:
ConcatenacaoGrandesTextos

Para a concatenação com quantidade definida de itens, foi utilizado um código semelhante ao seguinte:
ConcatenacaoPequenosTextosCodigo

Já nesse caso, podemos observar a vantagem que o “string.Concat” leva em relação aos demais, veja:
ConcatenacaoPequenosTextos

Para a formatação, foi utilizado um código semelhante ao seguinte:
FormatacaoCodigo

Por fim, observamos que o uso do “ToString” é mais performático comparado aos demais:
Formatacao

Os exemplos deste código e dos outros códigos desta série de posts sobre performance estão disponíveis no GitHub: https://github.com/vmussak/StringTests

Por hoje é só isso, qualquer dúvida ou sugestão, estou à disposição! Até mais 😀

Advertisement

3 thoughts on “Performance com C# – Manipulação de Strings

  1. Luan Cristian Froehlich 23/05/2016 / 12:53

    Demorou para eu achar um artigo bom assim. Direto, pratico, bem explicado e provado na pratica.
    To aqui no F5 esperando os próximos artigos! ;D

    Gostar

    • viniciusmussak 23/05/2016 / 16:19

      Opa! Obrigado pelo feedback Luan 😀 Logo logo tem mais, se tiver alguma sugestão será muito bem-vinda 😉

      Gostar

Deixe uma Resposta

Preencha os seus detalhes abaixo ou clique num ícone para iniciar sessão:

Logótipo da WordPress.com

Está a comentar usando a sua conta WordPress.com Terminar Sessão /  Alterar )

Facebook photo

Está a comentar usando a sua conta Facebook Terminar Sessão /  Alterar )

Connecting to %s