Question

Dans l'application Web, je suis en train de scinder des chaînes et d'attribuer des noms de liens ou des ensembles de chaînes. L’utilisation de Stringbuilder pour une application Web présente-t-elle un avantage significatif en termes de performances?

EDIT: 2 fonctions: diviser un lien en 5-10 chaînes. Puis reconditionnement dans une autre chaîne. De plus, j’ajoute une chaîne à la fois à un lien chaque fois que l’on clique sur le lien.

Était-ce utile?

La solution

Combien de chaînes ferez-vous concaténer? Savez-vous avec certitude combien il y en aura ou dépendra-t-il du nombre d'enregistrements dans la base de données, etc.?

Voir mon article sur ce sujet pour plus de détails et d'instructions, mais fondamentalement. , être dans une application Web n'a aucune incidence sur le coût de la concaténation de chaînes par rapport à l'utilisation d'un StringBuilder.

EDIT: Je crains que la question ne précise toujours pas exactement ce que vous faites. Si vous avez un ensemble fixe de chaînes à concaténer et que vous pouvez le faire en une fois, il est alors plus rapide et probablement plus lisible de le faire en utilisant la concaténation. Par exemple:

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

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

Une autre alternative consiste à utiliser une chaîne de format bien sûr. C'est peut-être le plus lent, mais le plus lisible:

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

La partie de votre question qui mentionne "ajout d'un lien à chaque fois" " suggère d'utiliser un StringBuilder pour cela - tout ce qui mène naturellement à une boucle est plus efficace (pour les nombres modérés à élevés) en utilisant StringBuilder.

Autres conseils

Vous devriez jeter un coup d'œil à cet excellent article de Jon Skeet à propos de concaténation de chaînes.

Oui, la concaténation de chaînes ordinaires est coûteuse (il faut en fait ajouter une chaîne à la fin d’une autre). Chaque fois qu'une chaîne est modifiée, .net supprime l'ancienne chaîne et en crée une nouvelle avec les nouvelles valeurs. C'est un objet immuable.

EDIT:

Stringbuilder doit être utilisé avec prudence et évalué comme toute autre approche. Parfois, associer deux chaînes ensemble sera plus efficace et devra être évalué au cas par cas.

Atwood a publié un article intéressant à ce sujet.

Pourquoi la performance serait-elle différente dans une application Web ou une application Winforms?

L'utilisation de constructeur de chaînes est une bonne pratique en raison de la mémoire et de l'allocation d'objets, les règles s'appliquent quelle que soit la raison pour laquelle vous générez le code.

Si vous créez la chaîne dans une boucle avec un grand nombre d'itérations, il est judicieux d'utiliser stringbuilder. Sinon, la concaténation de chaînes est votre meilleur choix.

Premièrement, vous écrivez toujours cette application? Si oui, alors STOP Performance tuning! Deuxièmement, donnez la priorité à la correction plutôt qu'à la vitesse. La lisibilité est beaucoup plus importante à long terme pour des raisons évidentes. Troisièmement, nous ne connaissons pas la situation exacte ni le code que vous écrivez. Nous ne pouvons pas vraiment vous dire si cette micro-optimisation est importante ou non pour la performance de votre code. MESUREZ la différence. Je recommande vivement Ants Profiler de Red Gate.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top