Tengo una situación en la que necesito concatenar varias cadenas para formar una identificación de una clase. Básicamente estoy haciendo un bucle en una lista para obtener los valores ToString de los objetos y luego concatenarlos.Cadena de concatenación vs String Builder. Rendimiento
foreach (MyObject o in myList)
result += o.ToString();
la lista no se espera que tenga más de 5 elementos (aunque podría pero eso es un caso muy, muy marginal) y por lo general va a tener de 1 a 3 elementos, siendo común a que sólo tienen uno o dos.
¿Cuál sería el rendimiento, la concatenación o el uso de un StringBuilder?
StringBuilder bld = new StringBuilder()
foreach (MyObject o in myList)
bld.Append(o.ToString());
estoy seguro si la creación de la StringBuilder tomará más tiempo que la concatenación estándar para el caso más habitual.
Esto es flojo, los elementos de la lista no cambian una vez creados, por lo que la identificación se construye perezosamente una vez cuando se llama.
Como nota al margen ... ¿Debo usar una matriz fija en lugar de una lista? ¿Obtendré algún rendimiento o mejora de la memoria si lo hago? (La lista solo se usa como un IEnumerable de todos modos)
Una vista más general de la pregunta podría ser, ¿cuántas cadenas son suficientes para detener la concatenación y comenzar a construir?
¿Debo molestarme en probar el caso?
if (myList.Count > 4)
ConcatWithStringBuilder(myList);
Este sería el caso perfecto para una micro-optimización inane. Ni siquiera te molestes con esta cantidad de cuerdas. –
¿La diferencia de microsegundos en el tiempo vale la pena? El tiempo que tardó en escribir esta pregunta es probablemente más que la diferencia entre concat/builder durante la vida del programa. Especialmente si es flojo y solo se llama una vez por ejecución. –
Posible duplicado de [String vs. StringBuilder] (https://stackoverflow.com/questions/73883/string-vs-stringbuilder) – Matt