Question

  

Doublons possibles:    est String.Format aussi efficace que StringBuilder
   C # sortie de chaîne: le format ou concat

Quelle est la priorité de la performance et quelles devraient être les conditions de préférer chacun des éléments suivants:

String.Format("{0}, {1}", city, state);

ou

city + ", " + state;

ou

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
Était-ce utile?

La solution

  • compilateur optimisera comme concat beaucoup de chaîne comme il peut, donc par exemple des chaînes qui vient de rompre à des fins de saut de ligne peut généralement être optimisée en une seule chaîne littérale.
  • Enchaînement avec des variables va se compilés dans String.Concat
  • StringBuilder peut être beaucoup plus rapide si vous faites plusieurs (plus de 10 ou alors je suppose) « modifications » à une chaîne, mais il porte une charge supplémentaire, car il alloue plus d'espace que vous avez besoin dans son tampon et redimensionne son tampon interne quand il a besoin.

J'utilise personnellement String.Format presque tout le temps pour deux raisons:

  • Il est beaucoup plus facile de maintenir la chaîne de format que réarranger un tas de variables.
  • String.Format prend une IFormatProvider qui est passé à tous les types IFormattable incorporés dans la chaîne (comme numerics) de sorte que vous obtenez la mise en forme numérique approprié pour la culture spécifiée et le contrôle général un peu plus sur la façon dont les valeurs sont formatées.

Par exemple, étant donné que certaines cultures utilisent une virgule comme point décimal que vous voulez assurer soit StringBuilder ou String.Format que vous spécifiez CultureInfo.InvariantCulture si vous voulez faire en sorte que les chiffres ont été mis en forme la façon dont vous avez l'intention.

Deux autres chose à noter ...

  • StringBuilder a également une fonction de AppendFormat qui vous donne la flexibilité de String.Format sans nécessiter un second tampon inutile.
  • Lorsque vous utilisez StringBuilder, assurez-vous que vous ne battez pas le but par des paramètres concaténer que vous passez à Append. Il est facile de manquer.

Autres conseils

Il n'y a pas diference pertinent. Mais en supposant que String.Format utilise en interne un StringBuilder (vous pouvez le voir avec l'outil de réflecteur), en utilisant directement StringBuilder.Append devrait être plus rapide.

EDIT: Bien sûr que l'utilisation opérateur « + » est la pire option, car il crée une nouvelle instance de chaîne pour chaque chaîne que vous concaténez

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