Pergunta

Duplicate possíveis:
vs StringBuilder

Eu só revisitados alguns dos livros que eu usei para pegar VB.NET. Não tenho a certeza que eu tenho isso na minha cabeça, entender como / o que StringBuilder é.

O que é a orientação para o uso? É melhor usá-lo se você está concatenando 2 strings ou 50?

Ou quando o comprimento da corda total é maior do que 128 caracteres?

Ou você vai ver um benefício de desempenho sempre que você usá-lo para adicionar strings juntos?

No caso em que é melhor usar uma instância de StringBuilder para construir uma instrução SQL que string.format("Select * from x where y = {0}",1)?

É sempre me pareceu que declarar outra variável e incluindo um espaço nome não é benéfico para pequenas concatenações de cadeia, mas eu não tenho certeza agora.

Desculpe, grande quantidade de documentação diz-lhe o que usar, não apenas o que é melhor.

Foi útil?

Solução

Eu tenho um artigo neste tema. Em resumo (copiado a partir do fundo da página):

  • Definitivamente usar StringBuilder quando você está concatenando em um loop não-trivial - especialmente se você não sabe com certeza (em tempo de compilação) quantas iterações você vai fazer através do laço. Por exemplo, a leitura de um arquivo de um personagem em um momento, a criação de uma corda como você vai usar o operador + = é potencialmente suicida desempenho.
  • Definitivamente usar o operador de concatenação quando você pode (legível) especificar tudo que precisa ser concatenados em um comunicado. (Se você tem uma série de coisas para concatenar, considerar chamar String.Concat explicitamente -. Ou String.Join se você precisar de um delimitador)
  • Não tenha medo de quebrar literais-se em vários pedaços concatenadas - o resultado será o mesmo. Você pode facilitar a leitura, quebrando um longo literal em várias linhas, por exemplo, sem prejuízo para o desempenho.
  • Se você precisa os resultados intermediários da concatenação para algo diferente do que alimentar a próxima iteração de concatenação, StringBuilder não vai ajudá-lo. Por exemplo, se você construir um nome completo de um nome e um sobrenome, e depois adicionar uma terceira peça de informação (o apelido, talvez) para o final, você só vai beneficiar de usar StringBuilder se você não faz precisa a string (nome + sobrenome) para outros fins (como fazemos no exemplo que cria um objeto Person).
  • Se você só tem alguns concatenations para fazer, e você realmente deseja fazê-las em declarações separadas, isso realmente não importa o caminho que você vá. Que maneira é mais eficiente dependerá do número de concatenações os tamanhos de corda envolvidos, e que ordem eles estão concatenadas. Se você realmente acredita que parte do código a ser um gargalo de desempenho, perfil ou referência as duas coisas.

Outras dicas

Aqui é a minha regra de ouro:

StringBuilder é melhor utilizada quando o número exato de concatenations é desconhecido em tempo de compilação.

Pessoalmente eu uso StringBuilder quando eu tenho mais do que apenas uma ou duas cordas para concatenar. Eu não tenho certeza se há um acerto de desempenho real a ser adquirida, mas eu sempre ler e foi dito que fazendo uma concatenação regular com várias cadeias cria uma cópia extra da corda cada vez que você fazê-lo, ao usar StringBuilder mantém um copiar até que você chamar o método ToString() final sobre ele.

Alguém descobriu experimentalmente que o número crítico é 6. Mais de 6 concatenations em uma fileira e você deve usar um StringBuilder. não me lembro onde eu encontrei este.

No entanto, nota que, se você acabou de escrever isso em uma linha:

"qwert" + "yuiop" + "asdf" + "gh" + "jkl;" + "zxcv" + "bnm" + ",."

Isso é convertido em uma chamada de função (não sei como escrevê-lo em VB.net)

String.Concat("qwert", "yuiop", "asdf", "gh", "jkl;", "zxcv", "bnm", ",.");

Então, se você está fazendo todos os encadeamentos em uma linha, em seguida, não se incomodam com StringBuilder porque String.Concat efetivamente vai fazer todos os encadeamentos de uma só vez. É somente se você estiver fazendo-los em um loop ou sucessivamente concatenando.

A minha regra -. Quando você está adicionando a uma corda em um loop For ou Foreach, usar o StringBuilder

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