Tengo una pregunta relacionada con el rendimiento con respecto al uso de StringBuilder. En un bucle muy largo estoy manipulando una StringBuilder
y pasándolo a otro método como este:¿Es mejor reutilizar un StringBuilder en un bucle?
for (loop condition) {
StringBuilder sb = new StringBuilder();
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
Está crear instancias de StringBuilder
en cada ciclo del bucle es una buena solución? ¿Y está llamando a una eliminación mejor, como la siguiente?
StringBuilder sb = new StringBuilder();
for (loop condition) {
sb.delete(0, sb.length);
sb.append("some string");
. . .
sb.append(anotherString);
. . .
passToMethod(sb.toString());
}
Donde "no trivial" es la clave - los puntos de referencia pueden mostrar que una forma es * proporcionalmente * más rápida, pero sin ninguna pista sobre cuánto tiempo está tomando la aplicación real :) –
Consulte la prueba comparativa en mi respuesta a continuación. La segunda forma es más rápida. – Epaga
@Epaga: su punto de referencia dice poco sobre la mejora del rendimiento en la aplicación real, donde el tiempo necesario para realizar la asignación de StringBuilder puede ser trivial en comparación con el resto del ciclo. Es por eso que el contexto es importante en la evaluación comparativa. –