Concatenação de strings de forma eficiente

Postado em 08. ago, 2011 por em Tudo sobre Tecnologia

Sem dúvida você já ouviu dizer que concatenação de strings é uma operação custosa. Apesar do código aparentar modificar o conteúdo de uma string, na verdade você está criando um novo objeto string e deixando o velho objeto como lixo.

Exemplos:

string texto = "Olá, ";
texto += usuario.Name;
texto += ". Hoje é ";
texto += System.DateTime.Now.ToString();

É tão ineficiente quanto:

string texto = "Olá, ";
string tmp1 = new String( texto + usuario.Name );
string texto = tmp1; // "Olá, " agora é lixo.

string tmp2 = new String( texto + ". Hoje é " );
texto = tmp2;        // "Olá, <usuario>" agora é lixo.

string tmp3 = new String( texto + DateTime.Now.ToString() );
texto = tmp3;        // "Olá, <usuário>. Hoje é " agora é lixo.

As string tmp1, tmp2 e tmp3, e a string originalmente construída “texto” são todos lixo. O método += na classe string cria um novo objeto string e retorna aquela string. Ele não modifica a string existente concatenando os caracteres ao armazenamento original. Para concatenações simples como as vistas acima, você deve utilizar o método String.Format().

string texto = String.Format("Olá, {0}. Hoje é {1}",
                             usuario.Name,
                             DateTime.Now.ToString());

Para operações mais complexas você pode utilizar a classe StringBuilder. Evite-a se for utilizar com operações simples.

StringBuilder texto = new StringBuilder("Olá, ");
texto.Append(usuario.Name);
texto.Append(". Hoje é ");
texto.Append(DateTime.Now.ToString());
string mensagem = texto.ToString();

Tags: , , ,

Deixe um comentário

You must be logged in to post a comment.