Novidades DotNet 5 — Teste de Performance com EFCore 5 versus EFCore 3.1 — Tiago Tartari

Tiago Tartari
3 min readNov 22, 2020

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.

--

--

Tiago Tartari

Microsoft MVP, programador por mais de 18 anos onde 10 deles atuando como arquiteto de soluções para e-commerce, palestrante técnico, apaixonado por performance