QUE ESTRATÉGIA ABORDAR EM MUITOS DADOS

KERPLUNK 09/09/2022 20:23:21
#500438
Citação:

:
NOWLIGHTS

Minha aplicação é em Blazor webassembly utilizo C# e html puro para fazer isso.
Basicamente faço da seguinte forma, quando faço a primeira requisição o retorno de uma classe que contem uma propriedade que me informa a quantidade de registro com critério da consulta e outra propriedade com a lista de registros (200 registros ou menos se quiser) depois vou fazendo a busca dos registros até trazer todos os registros, tenho uma classe que controla tudo isso para mim é possível cancelar a busca de registro....






Basicamente, um lazy loading feito à mão
MARCELOKROL 11/09/2022 21:12:42
#500439
Eu acho que não é problema de banco e nem de servidor, é programação mesmo.
Vou relatar o que acho e o que aconteceu comigo: Em uma aplicação, usando a abordagem code first, por exemplo: Tabela Empresa, que se relaciona com Produtos, Pessoas, Grupos, e por ai vai... Quando se faz uma consulta por exemplo de empresas no net core, e usando o include (pelo menos aconteceu comigo, e me corrijam se estiver errado), o EF traz as Empresas com todos os relacionamentos, que se auto relacionam com eles mesmos (propriedades de navegação) isso gerava pra mim um json de mais ou menos 500mb, levava 20 minutos para baixá-lo e deserializá-lo.
Quando percebi e entendi que o problema não era o EF nem banco, e muito menos o servidor, eu resolvi criar uma view model, onde esta retorna pra mim apenas as propriedades que eram necessárias.
Para fazer o match entre a view model e o domínio consultado, eu usei o automapper, e passou de 20 minutos para 5 segundos.

Então... Veja se voce não esta retornando o domínio (a entidade pura para o front), se for isso, crie uma view model e retorne apenas os campos necessários.

Espero ter ajudado, e boa sorte
MRSILVA 11/09/2022 22:50:07
#500440
Citação:

EF traz as Empresas com todos os relacionamentos, que se auto relacionam com eles mesmos (propriedades de navegação) isso gerava pra mim um json de mais ou menos 500mb, levava 20 minutos para baixá-lo e deserializá-lo.



MARCELOKROL

Mas esse problema é fácil de resolver é só desabilitar o Lazy Loading no Entity Framework, dessa forma só retorna o que voce quer, ou seja, para trazer as propriedades de navegação ou qualquer outra propriedade relacionada tem que ser usado o Include ou ThenInclude, se não usar essas propriedades ficam fazias, dessa forma da para controlar somente o que realmente precisa no momento.
MARCELOKROL 12/09/2022 08:23:48
#500441
Citação:

:
EF traz as Empresas com todos os relacionamentos, que se auto relacionam com eles mesmos (propriedades de navegação) isso gerava pra mim um json de mais ou menos 500mb, levava 20 minutos para baixá-lo e deserializá-lo.

MARCELOKROL

Mas esse problema é fácil de resolver é só desabilitar o Lazy Loading no Entity Framework, dessa forma só retorna o que voce quer, ou seja, para trazer as propriedades de navegação ou qualquer outra propriedade relacionada tem que ser usado o Include ou ThenInclude, se não usar essas propriedades ficam fazias, dessa forma da para controlar somente o que realmente precisa no momento.



O meu problema foi saneado. Eu explanei tudo isso, para exemplificar que aconteceu comigo, e também como fiz para resolve-lo, para que o colega verifique se não é isso o que acontece com ele. Estou engatinhando no EF core, já aprendi muita coisa, e sei que tenho ainda muito o que aprender.
Estou desenvolvendo agora um projeto grande, onde receberá vários dados de várias empresas, e sei que vou precisar de ajuda, e sempre tentarei contribuir com o meu pouco conhecido para essa comunidade.

Abraço e bom dia a todos
CLEVERTON 12/09/2022 13:53:08
#500444
Se tiver usando EF, uma coisa interessante é usar o método de Extensão .AsNoTracking()

e sempre ter os índices necessários
UNWIRED 24/11/2022 10:40:14
#500816
CLEVERTON para melhorar ainda mais sugiro o AsNoTrackingWithIdentResolution ( a partir do .net 5 se não me engano ).
NOWLIGHTS Além do AsNoTrackingWithIdentResolution ( se não precisar editar nada dos registros ), sempre aconselho Paginação. Dúvido que alguém precise de 2.500 registros na tela de uma única vez.
Outra dica ( que acho que já comentaram ), retorne apenas os dados realmente necessários, usando o .Select() antes de efetivar a consulta ( .ToListAsync, FirstOrDefaultAsync ).
Verifique os Índices.
Em casos pontuais, pode até ser feito um sql do modo clássico, que voce tem o total controle da query e executar pelo EF.
Página 2 de 2 [16 registro(s)]
Faça seu login para responder