Em um post anterior, falamos dos potenciais ganhos de performance resultantes da opção de compilação em camadas, fornecida pelo JIT. Na prática, o JIT compila um mesmo código, múltiplas vezes, gerando, em cada nova compilação, um código ainda melhor que o anterior.
Além dessa nova opção, há também a alternativa de pedirmos que o compilador gere código nativo, junto com a compilação para a Intermediate Language (naquele mesmo processo que executamos no Visual Studio, por exemplo, e não durante a execução da aplicação). Essa opção ficou conhecida como ReadyToRun
.
A compilação ReadyToRun
pode ser ativada diretamente no arquivo de configuração.
<PropertyGroup> <PublishReadyToRun>true</PublishReadyToRun> </PropertyGroup>
O arquivo executável gerado ficará signficativamente maior. A razão para isso é que, por motivos de compatibilidade, tanto o código nativo quanto o IL vão estar no arquivo. Ou seja, além do tamanho do executável gerado pelo processo tradicional (somente com Intermediate Language), serão acrescidos os bytes relativos ao código nativo. Entretanto, o tempo para inicialização será muito menor.
Outro ponto importante de atenção é que, por razões óbvias, sua aplicação precisará ser self-contained e será necessário especificar o runtime onde a aplicação irá funcionar.
dotnet publish -c Release -r win-x64 --self-contained
Honestamente, exceto por cenários muito específicos, os ganhos de performance obtidos com essa opção são difíceis de justificar. Há aspectos mais importantes a considerar antes de recorrer a mudanças no processo de compilação.