Pergunta

Duplicatas possíveis:
é String.Format tão eficiente quanto StringBuilder
C # string de saída: formato ou concat

Qual é a prioridade desempenho e quais devem ser as condições para preferir cada um dos seguintes:

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

ou

city + ", " + state;

ou

StringBuilder sb = new StringBuilder();
sb.Append(city);
sb.Append(", ");
sb.Append(state);
sb.ToString();
Foi útil?

Solução

  • Compiler irá otimizar tanto concat string como ele pode, assim, por exemplo cordas que estão apenas quebrados para fins de quebra de linha geralmente pode ser otimizado em um único literal string.
  • A concatenação com variáveis ??vai ser compilados em String.Concat
  • StringBuilder pode ser muito mais rápido se você estiver fazendo vários (mais de 10 ou então eu acho) "modificações" para uma string mas carrega alguma sobrecarga extra porque ele aloca mais espaço do que você precisa em seu buffer e redimensiona a sua buffer interno quando ele precisa.

Eu pessoalmente uso String.Format quase todo o tempo por dois motivos:

  • É muito mais fácil de manter a cadeia de formato de reorganizar um grupo de variáveis.
  • String.Format leva um IFormatProvider que é passado para quaisquer tipos IFormattable embutidos na string (como numéricos) para que você obtenha apropriado numérico formatação para a cultura especificada e em geral apenas mais controle sobre como os valores são formatados.

Por exemplo, uma vez que algumas culturas usam uma vírgula como um ponto decimal que você gostaria de garantir tanto com StringBuilder ou String.Format que você especificar CultureInfo.InvariantCulture se você queria para garantir que os números foram formatados da maneira que você pretende.

Mais dois coisa a nota ...

  • StringBuilder também tem uma função AppendFormat que lhe dá a flexibilidade de String.Format sem a necessidade de um segundo tampão desnecessário.
  • Ao usar StringBuilder, certifique-se que você não derrotar o propósito concatenando parâmetros que você passa para acrescentar. É fácil de perder.

Outras dicas

Não há nenhuma diferença relevante. Mas assumindo que String.Format usa internamente um StringBuilder (você pode ver que com a ferramenta Refletor), usando diretamente StringBuilder.Append deve ser mais rápido.

EDIT:. É claro que o uso de "+" operador é a pior opção, uma vez que cria uma nova instância de cadeia para cada corda que você está concatenando

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top