.NET 7 ainda mais rápido, Native OAT e JIT
Recentemente, a Microsoft anunciou que o .NET 7 será lançado oficialmente em novembro deste ano e revelou muitos de seus novos recursos.
O .NET 7 será ainda mais rápido!. O Motivo, é que a partir do .NET 7 será possível compilar em AOT sem mudar nenhuma linha de código.
Para compilar utilizando AOT basta informar no seu projeto a tag PublishAot
<PropertyGroup
<PublishAot>true</PublishAot>
</PropertyGroup>>
Mais informações em: Native AOT deployment overview — .NET | Microsoft Docs.
Veja um benchmark comparando NativeAOT com ReadyToRun, no qual o tempo de compilação é até 73% mais rápido.
Comparação de velocidade (Fonte: Microsoft)
Comparação de tamanho (Fonte: Microsoft)
Compilador JIT (Just-in-Time)
Até o .NET 6, o compilador utilizado era o JIT (Just-in-Time), assim como outras linguagens como Java, Android.
Mas afinal como funciona um compilador JIT?
Enquanto um compilador normal é responsável por compilar todo o código quando vamos executar o programa, converter o código em binário e gerar o executável, o compilador JIT otimiza este trabalho por compilar apenas o código de cada função quando necessário.
A compilação just-in-time (JIT) cria perfis da plataforma de destino enquanto ela é executada e recompila em tempo real para oferecer desempenho aprimorado.
Desta forma, quando formos executar um programa, o compilador JIT (Just-In-Time), apenas compilará as funções que serão utilizadas naquele momento, salvando o resultado em um cache. À medida que usamos o programa, quando nos deparamos com uma nova função que ainda não foi compilada, ela é compilada novamente. Mas, quando encontramos uma função que já foi utilizada, ao invés de compilá-la novamente, ela é pesquisada no cache, economizando um tempo significativo.
Compilação AOT (Ahead-Of-Time)
A Compilação Antecipada (Ahead-Of-Time) nada mais é que compilar todo o programa antes da execução do programa. O que faz com que, seu Build seja mais demorado, porém a performance em tempo de execução melhor!.
A compilação Ahead of Time (AOT) proporciona um tempo de inicialização mais rápido, principalmente quando a maior parte do código é executada na inicialização. No entanto, requer mais memória e mais espaço em disco.
Os AOTs mais conhecidos são do C e C++, além do Delphi, Go, D, Rust. Mas note que todas essas linguagens podem e costumam ter as duas formas. Uma não impede a outra a não ser que a linguagem tenha especificado diferente por alguma razão, mas isso não costuma acontecer.
Comparativo entre AOT e JIT
Abaixo um gráfico que faz uma comparação entre AOT e JIT.
Conclusão
Não existe bala de prata, cada um tem seu ponto positivo, cabe a você, ver o que realmente importa para você.
Em breve estarei trazendo mais algumas melhoria que estão por vir no .net 7