Novidades DotNet 5 — Teste de Performance com EFCore 5 versus EFCore 3.1 — Tiago Tartari
Sabemos que a Microsoft, desde o anúncio do .NET Core em 2014, vem dando passos importantes na unificação da sua principal plataforma de desenvolvimento, o .NET. Algumas versões já se passaram e a evolução da plataforma é notória.
Novembro de 2020 foi marcado com o lançamento do .NET 5 e com isso algumas novidades vieram juntas com o lançamento.
Assim sendo, quero mostrar, na prática, um teste de performance comparando o .NETCore 3.1 e o .NET 5.
Também abordo sobre o IdentityResolution e seu impacto positivo no uso de recursos computacionais, como a memória.
O Cenário
No teste de carga, executado em uma máquina padrão de mercado, adotei a seguinte configuração:
- 1000vus,
- Um ramp-up por segundo
- 333 iterações a cada ramp-up
- Duração de 120s.
Foram 3 situações que fiz a comparação, uma com EFCore 3.1, outra somente atualizando para o EFCore 5.0, essas duas primeiras utilizando o AsNoTracking() e a última com o EFCore 5.0 utilizando o AsNoTrackingIdentityResolution().
As ferramentas
Um bom teste de carga deve ser seguido de boas ferramentas, a minha Stack preferida:
Diferente dos outros posts, nesse post, colocarei o resultado em primeiro lugar.
Resultado
Em resumo, o .NETCore 5, só de atualizar o framework você tem melhorias no Throughput aumentando em mais de 15% as requisições por segundo.
Ao utilizar o AsNoTrackingIdentityResolution(), melhoramos o Throughput em mais de 32% e reduzimos a alocação de memória em quase 50%.
Primeiro cenário, utilizando EFCore Core 3.1 com AsNoTracking()
.NET Core 3.1 / AsNoTracking() --------------------- Requests Total 170.878 / 91k reqps Throughput 1140 AVG 198 Memory 365 Max / 206 Avg GC 2 8 GC 1 57 GC 0 127
2º cenário, utilizando EF Core 5.0 com AsNoTracking()
.NET 5.0 / AsNoTracking() --------------------- Requests Total 197.556 / 108k reqps Throughput 1638 / seconds AVG 180 Memory 427 Max / 216 Avg GC 2 8 GC 1 47 GC 0 128
3º cenário, utilizando EF Core 5.0 com AsNoTrackingIdentityResolution()
.NET 5.0 / AsNoTrackingWithIdentityResolution() --------------------- Requests Total 206.278 / 111k reqps Throughput 1690 / seconds AVG 172 Memory 435 Max / 139 Avg GC 2 8 GC 1 54 GC 0 149
Originally published at https://www.tiagotartari.net on November 22, 2020.