Pregunta

Tengo curiosidad. El escenario es una aplicación / sitio web con, por ejemplo 100 de conexiones simultáneas y muchos (20?) Carga la página por segundo.

Si las necesidades de aplicaciones de servidor a una cadena con formato

string.Format("Hello, {0}", username);

¿El "Hola, {0}", sean internados? ¿O sería solamente sean internados con

string hello = "Hello, {0}";
string.Format(hello, username);

Lo cual, con respecto a la internación, daría un mejor rendimiento: los anteriores o,

StringBuilder builder = new StringBuilder()
builder.Append("Hello, ");
builder.Append(username);

o incluso

string hello = "Hello, {0}";
StringBuilder builder = new StringBuilder()
builder.Append("Hello, ");
builder.Append(username);

Así que mis preguntas principales son: 1) ¿Un string.Format literal ser internada 2) ¿Vale la pena establecer un nombre de variable para un StringBuilder para una búsqueda rápida, o 3) ¿Es la búsqueda en sí bastante pesado (si # 1 anterior es un no)

Me di cuenta que probablemente daría lugar a ganancias minúsculos, pero como he dicho tengo curiosidad.

¿Fue útil?

Solución

String.Format realmente utiliza un StringBuilder internamente, así que no hay razón para llamarlo directamente en el código. En cuanto a la internación del literal se refiere, las dos versiones de código son los mismos que el compilador de C # creará una variable temporal para almacenar el literal.

Por último, el efecto de la internación en una página web es insignificante. La renderización de páginas es esencialmente una operación de manipulación de cadenas de alta resistencia lo que la diferencia es insignificante internar marcas. Se puede lograr mucho más beneficios en el rendimiento de una manera mucho más fácil mediante el uso de la página y el almacenamiento en caché de control.

Otros consejos

Hay un método estático método (str) String.IsInterned. Se podría hacer algunas pruebas y averiguar!

http://msdn.microsoft.com/en- es / library / system.string.isinterned.aspx

Respuesta rápida:. Ejecutar un 100k iteraciones y averiguar

No se puede superar

return "Hello, " + username;

Si el escenario es realmente así de simple.

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