Question sur la chaîne performances interner
-
29-09-2019 - |
Question
Je suis curieux. Le scénario est une application web / site avec par exemple 100 de connexions simultanées et beaucoup (20?) Page se charge par seconde.
Si les besoins d'applications au serveur une chaîne formatée
string.Format("Hello, {0}", username);
Est-ce que le "Bonjour, {0}" être interné? Ou serait-ce que interné avec
string hello = "Hello, {0}";
string.Format(hello, username);
Ce 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);
Alors mes questions principales sont les suivantes: 1) Est-ce un string.Format littéral être interné 2) Est-il utile la fixation d'un nom de variable pour une stringbuilder pour une recherche rapide, ou 3) La recherche elle-même assez lourd (si # 1 ci-dessus est un non)
Je sais que cela entraînerait probablement des gains minuscules, mais comme je l'ai dit que je suis curieux.
La solution
String.Format utilise en fait un StringBuilder interne, donc il n'y a aucune raison d'appeler directement dans votre code. En ce qui interner du littéral est concerné, les deux versions de code sont les mêmes que le compilateur C # va créer une variable temporaire pour stocker le littéral.
Enfin, l'effet d'interner dans une page Web est négligeable. Le rendu des pages est essentiellement une opération de manipulation de chaîne lourde de sorte que la différence est négligeable interner marques. Vous pouvez obtenir des avantages beaucoup plus de performance d'une manière beaucoup plus facile en utilisant la page et la mise en cache de contrôle.
Autres conseils
Il existe une méthode statique méthode String.IsInterned (str). Vous pouvez faire des tests et trouver!
http://msdn.microsoft.com/en- nous / bibliothèque / system.string.isinterned.aspx
Réponse rapide:. Exécuter un 100k itérations et savoir
Vous ne pouvez pas battre
return "Hello, " + username;
si votre scénario est vraiment aussi simple que cela.