¿La forma más eficaz de concatenar cadenas?
¿Cuál es la forma más eficaz de concatenar cadenas?
Rico Mariani , el gurú del rendimiento de .NET, publicó un artículo sobre este mismo tema. No es tan simple como podría sospecharse. El consejo básico es este:
Si tu patrón se parece a:
x = f1(...) + f2(...) + f3(...) + f4(...)
ese es un concat y es rápido, StringBuilder probablemente no ayude.
Si tu patrón se parece a:
if (...) x += f1(...)
if (...) x += f2(...)
if (...) x += f3(...)
if (...) x += f4(...)
entonces probablemente quieras StringBuilder.
Otro artículo más que respalda esta afirmación proviene de Eric Lippert, donde describe +
de manera detallada las optimizaciones realizadas en concatenaciones de una línea.
El StringBuilder.Append()
método es mucho mejor que utilizar el +
operador. Pero descubrí que, cuando se ejecutan 1000 concatenaciones o menos, String.Join()
es incluso más eficiente que StringBuilder
.
StringBuilder sb = new StringBuilder();
sb.Append(someString);
El único problema String.Join
es que hay que concatenar las cadenas con un delimitador común.
Editar: como señaló @ryanversaw , puedes hacer el delimitador string.Empty
.
string key = String.Join("_", new String[]
{ "Customers_Contacts", customerID, database, SessionID });
Hay 6 tipos de concatenaciones de cadenas:
- Usando el
+
símbolo más ( ). - Usando
string.Concat()
. - Usando
string.Join()
. - Usando
string.Format()
. - Usando
string.Append()
. - Usando
StringBuilder
.
En un experimento, se ha demostrado que string.Concat()
es la mejor manera de abordar si las palabras son menos de 1000 (aproximadamente) y si las palabras son más de 1000, entonces StringBuilder
se debe utilizar.
Para obtener más información, consulte este sitio .
cadena.Join() vs cadena.Concat()
El método string.Concat aquí es equivalente a la invocación del método string.Join con un separador vacío. Agregar una cadena vacía es rápido, pero no hacerlo es aún más rápido, por lo que el método string.Concat sería superior aquí.
De Chinh Do: StringBuilder no siempre es más rápido :
Reglas de juego
Al concatenar tres valores de cadena dinámicos o menos, utilice la concatenación de cadenas tradicional.
Al concatenar más de tres valores de cadena dinámica, utilice
StringBuilder
.Al crear una cadena grande a partir de varios literales de cadena, utilice el
@
literal de cadena o el operador + en línea.
La mayoría de las veces StringBuilder
es tu mejor opción, pero hay casos, como se muestra en esa publicación, en los que al menos deberías pensar en cada situación.