2010-06-23 7 views
3

Je suis curieux. Le scénario est une application Web/site avec, par exemple, 100 de connexions simultanées et de nombreux (20?) Chargements de pages par seconde.Question sur la performance d'internalisation de chaîne

Si l'application a besoin au serveur une chaîne formatée

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

Est-ce que le "Bonjour, {0}" être interné? Ou serait-il interné seulement

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

qui, en ce qui concerne interner, donnerait de meilleures performances: ci-dessus ou,

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

ou même

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

Mes questions principales sont: 1) Une chaîne de caractères sera-t-elle internalisée? 2) Vaut-il la peine de définir un nom de variable pour un constructeur de chaîne pour une recherche rapide, ou 3) La recherche elle-même est assez lourde (si # 1 ci-dessus est un non)

Je me rends compte que cela entraînerait probablement des gains minuscules, mais comme je l'ai dit, je suis curieux.

+0

Veuillez changer votre titre pour une question réelle. – Kena

+0

fait, puis-je avoir mon vote de retour? :-) –

Répondre

3

String.Format utilise en fait un StringBuilder interne, donc il n'y a aucune raison d'appeler directement dans votre code. En ce qui concerne l'internalisation du littéral, les deux versions de code sont les mêmes que le compilateur C# créera une variable temporaire pour stocker le littéral. Enfin, l'effet de l'internalisation dans une page Web est négligeable. Le rendu de la page est essentiellement une opération de manipulation de chaînes lourde, ce qui fait que l'internalisation des différences est négligeable. Vous pouvez obtenir des avantages de performance bien plus importants en utilisant la mise en cache des pages et des contrôles.

+0

Comment est-ce que vous avez si peu de points? Bonne réponse :-) –

+2

même si String.Format utilise une chaîne Builder pour concaténer la chaîne dont elle a encore besoin pour analyser la chaîne de formatage de ses paramètres. –

+1

L'alternative est de construire la chaîne pas à pas, en créant du code plus difficile à écrire, à lire et à maintenir. Le gain de performance est trop faible pour justifier cela. Il existe d'autres façons, bien plus utiles, d'améliorer les performances, telles que la mise en cache de sortie. –

1

Réponse rapide: exécutez une itération de 100 Ko et découvrez.

0

Vous ne pouvez pas battre

return "Hello, " + username; 

si votre scénario est vraiment simple.

+0

ce n'est pas vrai. StringBuilder et String.Concat() sont beaucoup plus rapides. –

+3

"Bonjour", + nom d'utilisateur; va compiler dans string.Concat ("Bonjour", nom d'utilisateur) donc je ne pense pas que tu as raison. –