Qual impacto (se houver) a mudança do Delphi 2009 para Unicode (/UTF16) tem no tamanho do executável e no consumo de memória?

StackOverflow https://stackoverflow.com/questions/82454

  •  01-07-2019
  •  | 
  •  

Pergunta

Aqui está um do departamento "Nenhuma pergunta é muito idiota":

Bem, como diz o assunto:Existe um impacto?Se sim, quanto?Todos os literais de string que tenho em meu código e em meus recursos DFM agora ocuparão o dobro de espaço dentro dos binários compilados?E quanto ao uso de memória em tempo de execução de aplicativos compilados?Todas as variáveis ​​de string agora ocuparão o dobro da RAM?Eu deveria me preocupar?

Lembro-me de algo assim sendo perguntado durante um dos primeiros webcasts de pré-lançamento, mas não consigo lembrar a resposta.E como o teste dura apenas 14 dias, não vou tentar sozinho antes que as bibliotecas de terceiros de que preciso sejam atualizadas (supostamente em cerca de um mês).

Foi útil?

Solução

D2009 usa UTF-16 para o tipo de string padrão, embora você possa criar variáveis ​​UTF-8 se necessário.

Jan Goyvaerts discute a compensação tamanho/velocidade em uma boa postagem no blog.

Literais de string em DFMs são UTF-8 desde pelo menos D7.Conseqüentemente, não haverá aumento no tamanho devido a strings em DFMs com D2009.

Outras dicas

Finalmente consegui colocar as mãos no Delphi 2009 e depois de fazer os ajustes necessários meu projeto agora compila e roda perfeitamente.:)

Para obter resultados rapidamente, inicialmente tive que comentar um módulo um pouco mais complexo do aplicativo, por isso ainda não é 100% comparável, mas já parece seguro o suficiente para prever que, apesar de uma quantidade significativa de literais de string em nosso código-fonte (mensagens de log de depuração excessivas ) o tamanho do binário compilado com o Delphi 2009 provavelmente será aproximadamente o mesmo de antes - se não for menor!

Eu me pergunto se o compilador Delphi realmente executa algum tipo de compactação nos binários ou pelo menos em suas seções de recursos de alguma forma?Eu realmente esperava que a mudança nos literais de string UTF-16 tivesse um impacto maior neste aplicativo específico.Os literais são realmente armazenados como UTF-16 (descompactado) dentro do binário?

Ainda não tive tempo de investigar diferenças no consumo de memória.

EDITAR: Não diretamente relacionado ao Unicode, mas definitivamente relacionado:Andreas Hausladen publicou recentemente um artigo interessante sobre o impacto (significativo) da {$STRINGCHECKS} opção do compilador (BTW:ativado por padrão) no tamanho do executável compilado: http://andy.jgknet.de/blog/?p=487

Há muitos anos que espero por uma VCL Unicode, finalmente a vemos.Não acho que a maioria dos aplicativos precise se preocupar com problemas de tamanho, pois eles não possuem tantos literais de string ou armazenam grandes quantidades de dados na memória.

As questões de usabilidade são mais ponderadas para justificar ao máximo o uso do Unicode.

Se algum desenvolvedor quiser criar pequenos exes, ele poderá otimizar manualmente usando AnsiString (se i18n não for um problema).

Não uso Delphi há anos, mas provavelmente depende da codificação Unicode que eles usam.UTF8 será exatamente o mesmo para o conjunto de caracteres ASCII normal (ele usa apenas mais de um byte quando você entra em caracteres exóticos).UTF16 pode estar um pouco inchado.

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