Perform Identity Resolution
É muito bom lembrar também que o EF Core 5 é uma das versões mais esperadas e está recheada de várias novidades, hoje irei apresentar um recurso muito interessante e extremamente importante.
AsNoTracking
Veja um exemplo de uma consulta utilizando AsNoTracking:
using var db = new ExemploContext();
var itens = db
.Itens
.AsNoTracking()
.Include(p => p.Pedido)
.Where(p => p.PedidoId == "EXEF001")
.ToList()
Vamos pegar o seguinte cenário onde eu tenho:
1 (um) - Pedido (Código do pedido = EXEF001) 1000 (mil) - Itens (Esses itens são do pedido -> EXEF001)
Se sua consulta retornou 1.000 (mil itens) e todos fazem parte de um único Pedido, teremos 2.000 (duas mil) instâncias de objetos agora, isso pode ser um problema de uso de memória, e pode causar lentidão em sua aplicação, o team do Entity Framework Core vem fazendo um ótimo trabalho e fazendo com que o ORM a cada versão seja mais produtivo e performático, mas aqui neste ponto específico temos um pequeno problema, que é o alocamento de objetos em memória, o qual poderia ser resolvido de maneira mais inteligente.
Perform Identity Resolution
Existe uma nova feature, que é um método de extensão (PerformIdentityResolution), extremamente inteligente e capaz de resolver esse problema de alocação de objetos em memória, assim em vez de ter 1.000(mil) instâncias de Pedido, passa agora ter uma única instância e a lista de Itens agora passa a usar esta única referência, além de deixar aplicação mais performática, veja como ficou simples de resolver isso na nova versão do EF Core 5:
using var db = new ExemploContext();
var itens = db
.Itens
.AsNoTracking()
.PerformIdentityResolution() // Aqui está a solução
.Include(p => p.Pedido)
.Where(p => p.PedidoId == "EXEF001")
.ToList()
Observe que agora usamos o seguinte metódo (PerformIdentityResolution) ele é o responsável por resolver esse pequeno problema de alocação de objetos em memória.
Deixe um comentário