Pregunta

En la aplicación web, estoy dividiendo cadenas y asignando nombres de enlaces o colecciones de cadenas. ¿Existe un beneficio de rendimiento significativo al usar stringbuilder para una aplicación web?

EDITAR: 2 funciones: dividir un enlace en 5-10 cadenas. Luego reempaquetado en otra cadena. También agrego una cadena a la vez a un enlace cada vez que se hace clic en el enlace.

¿Fue útil?

Solución

¿Cuántas cuerdas vas a concatenar? ¿Sabe con seguridad cuántos habrá, o depende de cuántos registros hay en la base de datos, etc.?

Consulte mi artículo sobre este tema para obtener más detalles y pautas, pero básicamente , estar en una aplicación web no hace ninguna diferencia en lo caro que es la concatenación de cadenas en comparación con el uso de un StringBuilder.

EDITAR: Me temo que aún no está del todo claro a partir de la pregunta exactamente qué estás haciendo. Si tiene un conjunto fijo de cadenas para concatenar, y puede hacerlo todo de una vez, entonces es más rápido y probablemente más legible hacerlo mediante concatenación. Por ejemplo:

string faster = first + " " + second + " " + third + "; " + fourth;

string slower = new StringBuilder().Append(first)
                                   .Append(" ")
                                   .Append(second)
                                   .Append(" ")
                                   .Append(third)
                                   .Append("; ")
                                   .Append(fourth)
                                   .ToString();

Otra alternativa es utilizar una cadena de formato, por supuesto. Este puede ser el más lento, pero más legible:

 string readable = string.Format("{0} {1} {2}; {3}",
                                 first, second, third, fourth);

La parte de su pregunta que menciona "agregar un enlace cada vez" sugiere usar un StringBuilder para ese aspecto, sin embargo, cualquier cosa que naturalmente conduzca a un bucle es más eficiente (para números moderados a grandes) usando StringBuilder.

Otros consejos

Debería echar un vistazo a este excelente artículo de Jon Skeet sobre concatenando cadenas.

Sí, concatenar cadenas regulares es costoso (realmente se agrega en una cadena al final de otra). Cada vez que se cambia una cadena, .net descarta la cadena anterior y crea una nueva con los nuevos valores. Es un objeto inmutable.

EDITAR:

Stringbuilder debe usarse con precaución y evaluarse como cualquier otro enfoque. A veces, conectar dos cadenas juntas será más eficiente y debe evaluarse caso por caso.

Atwood tiene un artículo interesante relacionado con esto.

¿Por qué el rendimiento sería diferente en una aplicación web o una aplicación winforms?

El uso de stringbuilder es una buena práctica debido a la memoria y la asignación de objetos, las reglas se aplican sin importar por qué está creando el código.

Si está haciendo la cadena en un bucle con un gran número de iteraciones, entonces es una buena idea usar el generador de cadenas. De lo contrario, la concatenación de cadenas es su mejor opción.

PRIMERO, ¿Sigues escribiendo esta solicitud? En caso afirmativo, ¡DETENGA la optimización del rendimiento! SEGUNDO, priorice la corrección sobre la velocidad. La legibilidad es mucho más importante a largo plazo por razones obvias. TERCERO, NO conocemos la situación exacta y el código que está escribiendo. Realmente no podemos aconsejarle si esta micro optimización es importante para el rendimiento de su código o no. MIDA la diferencia. Recomiendo encarecidamente el perfilador de hormigas de Red Gate.

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