Pregunta

  

Duplicados posibles:
   Es String.Format tan eficiente como StringBuilder
   salida C # de la secuencia:? formato o concat

¿Cuál es la prioridad rendimiento y cuáles deben ser las condiciones para preferir cada uno de los siguientes:

String.Format("{0}, {1}", city, state);

o

city + ", " + state;

o

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
¿Fue útil?

Solución

  • compilador optimizará tanto concat cadena como se pueda, así que por ejemplo cadenas que simplemente se rompen con fines de salto de línea por lo general se puede optimizar en una sola cadena literal.
  • La concatenación con variables conseguirá compilado en String.Concat
  • StringBuilder puede ser mucho más rápido si está haciendo varias (más de 10 o menos supongo) "modificaciones" en una cadena pero lleva algo de sobrecarga adicional, ya que asigna más espacio de lo que necesita en el búfer y cambia el tamaño de su buffer interno cuando se necesita.

Yo personalmente uso String.Format casi todo el tiempo por dos razones:

  • Es mucho más fácil mantener la cadena de formato de reordenación de un montón de variables.
  • String.Format toma una IFormatProvider que se pasa a cualquier tipo IFormattable incrustados en la cadena (como cifras) de manera que se obtiene el formato numérico apropiado para la cultura especificada y en general simplemente más control sobre cómo se formatean los valores.

Por ejemplo, ya que algunas culturas utilizan una coma como separador decimal que se desea asegurar, ya sea con o StringBuilder String.Format que especifique CultureInfo.InvariantCulture si quisiera asegurarse de que los números se formatean la forma que tenía planeado.

Dos cosa más que observar ...

  • StringBuilder también tiene una función AppendFormat que le da la flexibilidad de String.Format sin necesidad de un segundo tampón innecesaria.
  • Cuando se utiliza StringBuilder, asegúrese de que usted no suprima la función mediante la concatenación de los parámetros que se pasan a anexar. Es una tarea fácil de perder.

Otros consejos

No hay diference relevante. Pero suponiendo que String.Format internamente utiliza un StringBuilder (se puede ver que con la herramienta de reflector), utilizando directamente StringBuilder.Append debe ser más rápido.

EDIT: Por supuesto que el uso de "+" operador es la peor opción, ya que crea una nueva instancia de cadena para cada cuerda que está concatenando

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