Como melhorar o desempenho de concatenação da cadeia no Visual C#

Traduções de Artigos Traduções de Artigos
Artigo: 306822 - Ver produtos para os quais este artigo se aplica.
Expandir tudo | Reduzir tudo

Nesta página

Sumário

Este artigo passo a passo mostra as vantagens de utilizar a classe de StringBuilder através de técnicas de concatenação tradicional. As cadeias no .NET Framework são invariável (ou seja, o texto referido é só de leitura após a atribuição inicial). Isto fornece muitas vantagens de desempenho e representa alguns desafios para o programador que esteja habituado a técnicas de manipulação de cadeia C/C ++.

Descrição de cadeias no .NET Framework

Uma técnica para melhorar a concatenação de cadeias strcat() no Visual C/C ++ consiste em atribuir uma matriz de caracteres de grandes dimensões como uma memória intermédia e copiar dados de cadeia na memória intermédia. No .NET Framework, uma cadeia é imutável; não pode ser modificada no local. O C# + concatenação operador cria uma nova seqüência de caracteres e causas reduzido desempenho quando-concatena grandes quantidades de texto.

No entanto, o .NET Framework inclui uma classe de StringBuilder foi optimizada para concatenação de cadeias. Fornece os mesmos benefícios como utilizando uma matriz de caracteres no C/C ++, bem como automaticamente aumentar o tamanho da memória intermédia (se necessário) e o comprimento de rastreio para si. A aplicação de exemplo neste artigo demonstra a utilização da classe StringBuilder e compara o desempenho a concatenação.

Criar e executar uma aplicação de demonstração

  1. Inicie o Visual Studio e, em seguida, crie uma nova aplicação Visual C# consola.
  2. O código seguinte utiliza o operador de concatenação += e a classe de StringBuilder para tempo 5.000 concatenations de 30 caracteres. Adicione este código ao procedimento principal.
    const int sLen=30, Loops=5000;
    DateTime sTime, eTime;
    int i;
    string sSource = new String('X', sLen);
    string sDest = "";
    // 
    // Time string concatenation.
    // 
    sTime = DateTime.Now;
    for(i=0;i<Loops;i++) sDest += sSource;
    eTime = DateTime.Now;
    Console.WriteLine("Concatenation took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Time StringBuilder.
    // 
    sTime = DateTime.Now;
    System.Text.StringBuilder sb = new System.Text.StringBuilder((int)(sLen * Loops * 1.1));
    for(i=0;i<Loops;i++) sb.Append(sSource);
    sDest = sb.ToString();
    eTime = DateTime.Now;
    Console.WriteLine("String Builder took " + (eTime - sTime).TotalSeconds + " seconds.");
    // 
    // Make the console window stay open
    // so that you can see the results when running from the IDE.
    // 
    Console.WriteLine();
    Console.Write("Press Enter to finish ... ");
    Console.Read();
    					
  3. Guarde a aplicação. Prima F5 para compilar e executar a aplicação. Janelas da consola devem apresentar resultados semelhantes à seguinte:
    Concatenação demorou 6.208928 segundos.
    Cadeia de construtor demorou 0 segundos.

    Prima ENTER para concluir...
  4. Prima ENTER para terminar a aplicação e feche a janela da consola.

Resolução de problemas

  • Se estiver num ambiente que suporta a transmissão em sequência de dados, como, por exemplo, um formulário de Web ASPX ou a aplicação está a escrever os dados do disco, considere a evitar a sobrecarga da memória intermédia de concatenação ou StringBuilder e escrever os dados directamente para a transmissão em sequência através do método Response.Write ou o método adequado para a transmissão em sequência em questão.
  • Tente voltar a utilizar a classe de StringBuilder existente em vez de reatribuir sempre que é necessário um. Isto limita o crescimento da pilha de e reduz a recolha de lixo. Em qualquer dos casos, utilizando a classe StringBuilder torna mais eficiente utilização da pilha do que utilizar o operador +.

Referências

A classe de StringBuilder contém muitos outros métodos de manipulação de cadeia no local que não são descritos neste artigo. Para mais informações, procure "StringBuilder" na ajuda online.

Propriedades

Artigo: 306822 - Última revisão: 14 de julho de 2008 - Revisão: 3.0
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C# 2005
  • Microsoft Visual C# .NET 2002 Standard Edition
  • Microsoft Visual C# 2008 Express Edition
Palavras-chave: 
kbmt kbsweptvs2008 kbhowtomaster kbperformance KB306822 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 306822

Submeter comentários

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com