.NET 7 ainda mais rápido, Native OAT e JIT

Márcio Krüger
3 min readAug 9, 2022
.net 6 to .net 7

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

Comparação de velocidade (Fonte: Microsoft)

Comparação de tamanho

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.

normal jit compiler

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.

AOT vs 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

--

--

Márcio Krüger

Olá, eu sou Márcio Krüger, Arquiteto de Software, profissional com 18 anos de experiência em TI e desenvolvimento de sistemas.