¿La forma más eficaz de concatenar cadenas?

Resuelto jimmij asked hace 16 años • 18 respuestas

¿Cuál es la forma más eficaz de concatenar cadenas?

jimmij avatar Aug 22 '08 03:08 jimmij
Aceptado

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.

Lee avatar Aug 21 '2008 20:08 Lee

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.Joines 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 });
TheEmirOfGroofunkistan avatar Aug 21 '2008 20:08 TheEmirOfGroofunkistan

Hay 6 tipos de concatenaciones de cadenas:

  1. Usando el +símbolo más ( ).
  2. Usando string.Concat().
  3. Usando string.Join().
  4. Usando string.Format().
  5. Usando string.Append().
  6. 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 StringBuilderse 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í.

Mr_Green avatar Sep 04 '2012 06:09 Mr_Green

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 StringBuilderes 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.

palehorse avatar Aug 21 '2008 20:08 palehorse