Domanda

Possibili Duplicati:
È String.Formato efficiente come StringBuilder
C# Stringa di output:formato o concat?

Qual è il rendimento di priorità e quali dovrebbero essere le condizioni per preferire ciascuno dei seguenti:

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

o

city + ", " + state;

o

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
È stato utile?

Soluzione

  • Compilatore ottimizza tanto string concat, come si può, così, per esempio, le stringhe che sono appena rotto per interruzione di riga finalità di solito può essere ottimizzato in una singola stringa letterale.
  • Concatenamento con le variabili di ottenere compilato in Stringa.Concat
  • StringBuilder può essere molto più veloce se si sta facendo parecchi (più di 10 o così credo) "modifiche" di una stringa ma comporta alcuni extra costi, in quanto esso consente di allocare più spazio di quello necessario nel buffer e ridimensiona il suo buffer interno quando è necessario.

Io personalmente uso Stringa.Formato quasi tutto il tempo per due motivi:

  • È molto più facile per mantenere il formato della stringa di riorganizzare un sacco di variabili.
  • Stringa.La formattazione di un IFormatProvider che è passato per qualsiasi IFormattable tipi incorporati nella stringa (come numeri) in modo che si ottiene numerici appropriati formattazione di una determinata cultura e in generale solo più controllo su come i valori formattati.

Per esempio, poiché alcune culture una virgola, un punto decimale si vuole garantire con StringBuilder o una Stringa.Formato specificato CultureInfo.InvariantCulture se ci si vuole assicurare che i numeri sono stati formattato il modo in cui si desidera.

Due più cosa nota...

  • StringBuilder ha anche un AppendFormat funzione che ti dà la flessibilità di Stringa.Formato senza la necessità di un inutile secondo tampone.
  • Quando si utilizza StringBuilder, assicurarsi che non è sconfiggere lo scopo concatenando i parametri che si passa da Aggiungere.È facile da perdere.

Altri suggerimenti

Non c'è diference rilevante. Ma supponendo che String.Format utilizza internamente uno StringBuilder (si può vedere che con lo strumento Reflector), utilizzando direttamente StringBuilder.Append dovrebbe essere più veloce.

EDIT: Certo che utilizzano operatore "+" è l'opzione peggiore poiché crea una nuova istanza di stringa per ogni stringa che si sta concatenato

.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top