quarta-feira, 23 de março de 2011

Leitura obrigatória sobre strings

A maior facilidade das strings do Delphi em relação ao C e C++ é que elas não são baseadas em operações de "baixo nível" com ponteiros. Elas são facilmente quebradas, concatenadas ou copiadas. No caso das cópias, elas podem ser copiadas com performance pois mantém um contador de referências.

Em comparação com as linguagens interpretadas, gerenciadas e com "coletores de lixo" as strings nessas linguagens não são tão performáticas. Cópias de strings não são cópias de referências, mas da string completa mesmo, sem reference counting. Tratando - se de concatenação de strings então, o .Net Framework, até a versão 2.0, que eu saiba, encorajava o uso de StringBuilder em vez de strings dentro de um loop para montar um relatório ou tabela na web, por exemplo. Isso porque ao se concatenar duas strings o .Net Framework cria uma nova string com o conteúdo das duas, destruindo as outras duas, gerando um overhead.

Imagine quantas operações dentro de um loop não acontecem quando você faz um:

tabela += "<tr><td>" + col1 + "</td> <td>"+ col2+ "</td></tr>";

Só nesse trecho, bobinho e trivial, mas apenas um exemplo, foram concatenados 5 strings. Isso quer dizer que 5 "resultados" foram criados até chegar ao final, e que, duas a duas, de 5 a 10 strings foram marcadas para ser destruídas, pelo menos as constantes, excetuando-se as variáveis col1 e col2.

O simples fato de trocar o conteúdo de uma string gera a destruição da string atual e a criação de outra no .Net. O programador final não percebe isso porque a sintaxe é bastante "amigável" e para strings e loops pequenos realmente parece que o .Net é performático. Isso não acontece no Delphi.

Algumas leituras obrigatórias sobre strings:

Marco Cantu compara as strings do Delphi com outras linguagens, tanto no que tange à sintaxe como à performance. -->  http://blog.marcocantu.com/blog/delphi_super_duper_strings.html

Meu artigo sobre strings --> http://blog.vitorrubio.com.br/2010/08/strings-e-delphi-2010-na-clube-delphi.html

Paper na Embarcadero sobre Unicode --> http://www.embarcadero.com/images/dm/technical-papers/delphi-unicode-migration.pdf

Artigo DrBob sobre strings --> http://www.drbob42.com/examines/examinA7.htm

Artigo na Embarcadero --> http://edn.embarcadero.com/article/38437

O que eu mais gosto é este: breve história sobre as strings no Delphi --> http://www.codexterity.com/delphistrings.htm


Have Fun ;)

Nenhum comentário:

Postar um comentário

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)