Pregunta sobre el rendimiento de la internación de cadena
-
29-09-2019 - |
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.
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.