Pregunta

  

Duplicar posible:
   vs StringBuilder

Yo sólo a visitar algunos de los libros que he utilizado para recoger VB.NET. No estoy seguro de que tengo esto en mi cabeza, entender cómo / qué es StringBuilder.

¿Cuál es la guía para el uso? Es la mejor forma de usarlo si se está concatenando 2 cadenas o 50?

O cuando la longitud de la cadena total es mayor que 128 caracteres?

O vas a ver una mejora en el rendimiento cada vez que lo utiliza para agregar cadenas juntos?

En este caso es mejor utilizar una instancia de StringBuilder para construir una instrucción SQL que string.format("Select * from x where y = {0}",1)?

Es siempre me llamó la atención que declarar otra variable y que incluye un espacio de nombre no es beneficioso para las pequeñas concatenaciones de cadenas, pero no estoy seguro de que ahora.

Lo sentimos, gran cantidad de documentación dice que lo utilice, no es lo mejor.

¿Fue útil?

Solución

Tengo un artículo rel="noreferrer"> . En resumen (copiado de la parte inferior de la página):

  • Definitivamente el uso de StringBuilder cuando estás concatenar en un bucle no trivial - especialmente si usted no sabe a ciencia cierta (en tiempo de compilación) el número de iteraciones que va a hacer a través del bucle. Por ejemplo, la lectura de un archivo de un carácter a la vez, la creación de una cadena a medida que avanza mediante el operador + = es potencialmente suicida rendimiento.
  • Definitivamente utilizar el operador de concatenación cuando se puede (legible) especificar todo lo que necesita ser concatenados en un comunicado. (Si usted tiene una gran variedad de cosas para concatenar, considere llamar explícitamente String.Concat -. String.join o si necesita un delimitador)
  • No tenga miedo de romper literales en varios trozos concatenados - el resultado será el mismo. Puede facilitar la lectura, rompiendo un largo literal en varias líneas, por ejemplo, sin daño para el rendimiento.
  • Si necesita los resultados intermedios de la concatenación para algo más que alimentar la próxima iteración de la concatenación, StringBuilder no va a ayudarle. Por ejemplo, si se construye un nombre completo de un nombre y un apellido, y luego se agrega una tercera parte de la información (el apodo, tal vez) a la final, usted sólo se benefician del uso de StringBuilder si no lo hace necesitará la cadena (nombre + apellido) para otros fines (como lo hacemos en el ejemplo que crea un objeto Person).
  • Si sólo tiene unas pocas concatenaciones que hacer, y que realmente quiere hacer en estados separados, que en realidad no importa el camino que tomes. ¿Qué camino es más eficiente dependerá del número de concatenaciones los tamaños de cadena involucrados, y qué orden en que se concatenan. Si usted realmente cree que parte del código para ser un cuello de botella, el perfil de referencia o las dos cosas.

Otros consejos

Aquí está mi regla de oro:

  

StringBuilder se utiliza mejor cuando no se conoce en tiempo de compilación el número exacto de concatenaciones.

Personalmente utilizar StringBuilder cuando tengo algo más que una o dos cadenas a concatenar. No estoy seguro de si hay un verdadero impacto en el rendimiento que se pueden obtener, pero siempre he leer y han dicho que hacer una concatenación regular con múltiples cadenas crea una copia extra de la cadena cada vez que lo hace, durante el uso de StringBuilder mantiene a uno copiar hasta que llame al método ToString() definitiva al respecto.

Alguien ha descubierto experimentalmente que el número crítico es 6. Más de 6 concatenaciones en una fila y se debe utilizar un StringBuilder. no recuerdo donde encontré esto.

Sin embargo, tenga en cuenta que si usted acaba de escribir esto en una línea:

"qwert" + "yuiop" + "asdf" + "gh" + "jkl;" + "zxcv" + "bnm" + ",."

Esto se convierte en una llamada de función (no sé cómo se escribe en VB.net)

String.Concat("qwert", "yuiop", "asdf", "gh", "jkl;", "zxcv", "bnm", ",.");

Así que si usted está haciendo todas las concatenaciones en una línea, entonces no se moleste con StringBuilder porque String.Concat efectivamente hará todas las concatenaciones de una sola vez. Es sólo si se está haciendo en un bucle o sucesivamente concatenación.

Mi regla -. Cuando se va a añadir a una cadena en un bucle Foreach favor o, utilice el StringBuilder

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top