vb.net - example - Cuándo usar StringBuilder?
stringbuilder c# (6)
Alguien ha descubierto experimentalmente que el número crítico es 6. Más de 6 concatenaciones seguidas y debería usar un StringBuilder. No puedo recordar dónde encontré esto.
Sin embargo, tenga en cuenta que si solo escribe esto en una línea:
"qwert" + "yuiop" + "asdf" + "gh" + "jkl;" + "zxcv" + "bnm" + ",."
Eso se convierte en una llamada a función (no sé cómo escribirlo en VB.net)
String.Concat("qwert", "yuiop", "asdf", "gh", "jkl;", "zxcv", "bnm", ",.");
Entonces, si está haciendo todas las concatenaciones en una línea, no se moleste con StringBuilder porque String.Concat efectivamente hará todas las concatenaciones de una vez. Es solo si los haces en un bucle o sucesivamente concatenando.
Posible duplicado:
String vs StringBuilder
Acabo de volver a visitar algunos de los libros que usé para recoger VB.NET. No estoy seguro de tener esto en mi cabeza, entiendo cómo / qué es StringBuilder.
¿Cuál es la guía para usar? ¿Es mejor usarlo si estás concatenando 2 cuerdas o 50?
¿O cuando la longitud total de la cadena es mayor que 128 caracteres?
¿O verá un beneficio de rendimiento cada vez que lo use para agregar cadenas?
¿En qué caso es mejor usar una instancia de StringBuilder para construir una declaración de SQL que string.format("Select * from x where y = {0}",1)
?
Siempre me ha parecido que declarar otra variable e incluir un espacio de nombre no es beneficioso para concatenaciones de cadenas pequeñas, pero no estoy seguro ahora.
Lo siento, mucha documentación te dice qué usar, pero no lo mejor.
Aquí está mi regla de oro:
StringBuilder
se utiliza mejor cuando se desconoce el número exacto de concatenaciones en el momento de la compilación.
Mi regla: cuando agregas una cadena en un bucle For o Foreach, usa StringBuilder.
Personalmente utilizo StringBuilder cuando tengo más de una o dos cadenas para concatenar. No estoy seguro de si se puede obtener un rendimiento real, pero siempre he leído y me han dicho que al hacer una concatenación regular con múltiples cadenas crea una copia extra de la cadena cada vez que lo haces, mientras usa StringBuilder mantiene una. copie hasta que llame al método ToString()
final.
Tengo un artículo sobre este mismo tema . En resumen (copiado de la parte inferior de la página):
- Definitivamente use StringBuilder cuando esté concatenándose en un bucle no trivial, especialmente si no sabe con certeza (en tiempo de compilación) cuántas iteraciones realizará a través del bucle. Por ejemplo, leer un archivo de un personaje a la vez, construir una cadena sobre la marcha con el operador + = es potencialmente un suicidio de rendimiento.
- Definitivamente use el operador de concatenación cuando pueda (legible) especificar todo lo que necesita concatenarse en una declaración. (Si tiene una serie de elementos para concatenar, considere llamar a String.Concat explícitamente - o String.Join si necesita un delimitador).
- No tenga miedo de dividir los literales en varios bits concatenados; el resultado será el mismo. Puede ayudar a la legibilidad dividiendo un literal largo en varias líneas, por ejemplo, sin dañar el rendimiento.
- Si necesita los resultados intermedios de la concatenación para algo que no sea alimentar la próxima iteración de concatenación, StringBuilder no lo ayudará. Por ejemplo, si crea un nombre completo a partir de un nombre y un apellido, y luego agrega una tercera información (el alias, tal vez) hasta el final, solo se beneficiará de usar StringBuilder si no lo hace necesita la cadena (nombre + apellido) para otro fin (como lo hacemos en el ejemplo que crea un objeto Persona).
- Si solo tiene algunas concatenaciones que hacer, y realmente desea hacerlas en declaraciones separadas, en realidad no importa qué camino tomar. El camino que sea más eficiente dependerá de la cantidad de concatenaciones, los tamaños de cadena implicados y el orden en que están concatenados. Si realmente crees que esa parte del código es un cuello de botella de rendimiento, perfila o compara ambos aspectos.
Coding Horror tiene un buen artículo sobre esta cuestión, The Sad Tragedy of Micro-Optimization Theatre .