Anteriormente aviamos avaliado o desempenho quando concatenamos vários caracteres "f", utilizando String. Podemos concluir que utilizar String para concatenar strings pode ser muito prejudicial para o desempenho do seu código.
Hoje vamos analisar a diferença do tempo de processamento entre String e StringBuilder.
Para facilitar, vamos utilizar o mesmo código anterior, realizando pequenas adaptações, para vermos de fato a velocidade de execução do StringBuilder
- Comparando performance de String e String Builder
public class ConcatenaString {
public static void main(String[] args) {
// Trecho de código para String
String strFinal = "";
long tStart = System.currentTimeMillis();
// Vamos concatenar 100000 vezes o caractere 'f',
// então relembremos que cada vez que passarmos no laço
// a JVM irá criar um novo objeto em memória.
for (int i = 0; i < 100000; i++) {
strFinal += "f";
}
long tEnd = System.currentTimeMillis();
long tResult = tEnd - tStart;
System.out.println("Tempo de execução com String = " + tResult + " ms");
// Trecho de código para StringBuilder
StringBuilder strBuilder = new StringBuilder();
tStart = System.currentTimeMillis();
for (int i = 0; i < 100000; i++) {
strBuilder.append("f");
}
tEnd = System.currentTimeMillis();
tResult = tEnd - tStart;
System.out.println("Tempo de execução com StringBuilder = " + tResult + " ms");
}
}
Tempo de execução com String = 14627 ms Tempo de execução com StringBuilder = 0 ms
Na minha máquina ao executar o código acima, a saída foi de 14627ms para String com o operador "+" e 0ms para o StringBuilder. Foram utilizados apenas 100mil caracteres, mas vamos imaginar se aumentássemos em 10x esse valor... Seria 1milhão de caracteres.
Altere o valor do seu código e verifique a o tempo de processamento.
Perceba que para não tornar o teste tendencioso, coloquei o tInicio e o tFim no início e no fim do laço "for", dessa forma desconsideramos qualquer outro código que venha antes ou depois, por exemplo as atribuições e escritas no console, assim avaliamos puramente a concatenação de ambos.
Sem dúvidas a performance do StringBuilder comparado a String comum é muito melhor quando precisamos concatenar valores.
O que acontece na verdade é que StringBuilder é mútavel, ou seja, a cada "append(valor)" que fizemos no laço, concatenamos de fato um novo valor a String já existente, sem a necessidade da criação de um novo objeto em memória. Mas e qual a diferença entre StringBuilder e StringBuffer? A resposta fica para o próximo post. Até a próxima.

Nenhum comentário:
Postar um comentário