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:
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:
Para a verificação de string nula ou vazia foi utilizado um código semelhante ao seguinte:
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:
Para a concatenação com quantidade indefinida de itens, foi utilizado um código semelhante ao seguinte:
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:
Para a concatenação com quantidade definida de itens, foi utilizado um código semelhante ao seguinte:
Já nesse caso, podemos observar a vantagem que o “string.Concat” leva em relação aos demais, veja:
Para a formatação, foi utilizado um código semelhante ao seguinte:
Por fim, observamos que o uso do “ToString” é mais performático comparado aos demais:
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 😀
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
GostarGostar
Opa! Obrigado pelo feedback Luan 😀 Logo logo tem mais, se tiver alguma sugestão será muito bem-vinda 😉
GostarGostar