Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Guilherme Walter

Entity Framework 6 + PostgreSQL

Recommended Posts

Boa noite pessoal,

 

Alguém já utilizou em C# o Entity Framework com PostgreSQL e teve problemas com lentidão na consulta de um datagrid? na tabela possui 100 mil registro com cadastro, quando eu vou fazer uma pesquisa, demora para retornar o resultado em torno de 5 a 6 segundos, é normal?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não, o problema de tempo de execução não está necessariamente ligado ao Entity, o que pode estar acontecendo é a falta de índices ou então lentidão de conexão. Já verificou estes dois pontos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá,

 

O EF 6 funciona muito bem com o MS SQL Server.

Ao meu ver, com outros BD ele costuma apresentar algumas problemas.

Exemplo: Tentei utilizar o SQLite com o EF6 e foi um desastre. Depois de dias tentando todo tipo de solução, resolvi voltar para o EF5 - e o resultado final foi safisfatório.

 

Você provavelmente está utilizando o Npgsql Provider, a mudança do EF6 para o 5 é simples, talvez valha a pena fazer uma mudança pra ver se melhora o termos de desempenho.

 

Entretanto quanto o problema é desempenho, na maioria das vezes você deixou de cumprir boas práticas.

Tal como disse o KhaosDoctor acima, você precisa indexar o campo principal de busca.

A não indexação desse campo acarreta em enorme diferença no tempo de resposta em tabelas com grande numeros de registros.

 

Quanto ao tempo de resposta, para saber se é normal ou não.

Você precisa realizar um benchmark na sua máquina local. Anotar os ms de resposta pra cada caso.

E então depois, com a aplicação em um servidor, verificar quão maior é o tempo de resposta para as mesmas requisições.

 

Uma outra coisa menos importante, mas que pode fazer diferença, é a forma como você escreveu as queries.

Tem muito material em inglês dizendo a maneira mais eficiente de utilizar expressões lambdas.

Sugiro buscar no google materias de comparação: query errada vs query certa.

 

Espero que consiga resolver o problema ai.

E por gentiliza, não deixe de voltar aqui e dar um feedback final sobre o problema.

Está tua experiência e a tentativa de solução é muito enriquecedora para a comunidade.

 

Boa sorte ai!

 

Aguardo o final da história!

 

[]s

TE+

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Alan,

 

Até o momento não consegui identificar nada ainda de errado com a query, eu utilizo Npgsql e dotConnect For PostgreSQL, assim que eu encontrar alguma solução postarei aqui sim. obrigado a todos pelas dicas.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema não é a Query, mas a estrutura da tabela, se você não tem indices ou coisas do tipo, a leitura fica muito lenta. Verifique se você está fazendo as ligações pelas chaves também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa tabela não possui chave estrangeira, tem alguma regra ou como eu possa saber quando precisa criar índice na tabela?

 

Sempre que você possui um número grande de registros, que é o caso, você tem que atribuir um índice(indexar) o principal campo do registro. Aquele que será alvo de constantes buscas.

 

É importante salientar que você só deve indexar os campos mais utilizados.

Apesar de trazer grande desempenho, toda vez que você indexa um campo, o SGBD cria um código por trás que aumenta o tamanho do banco. Assim sendo, indexar todos os campos, ou muitos, é totalmente inviável. O BD ficaria com um tamanho enorme, sem falar que campos poucos utilizados em buscas não necessitam ser indexados.

 

Sugiro você buscar info sobre indexers no Postgree.

Boa sorte!

 

Ah.. e caso resolva o problema através do uso de índices(indexers), por gentileza nos de o feedback.

 

Boa sorte!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessa tabela não possui chave estrangeira, tem alguma regra ou como eu possa saber quando precisa criar índice na tabela?

 

O Índice é sempre relacionado às chaves primárias, caso haja outro campo que não é repetitivo então ele também pode ser considerado índice (apesar de esta prática não ser muito recomendada).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu utilizo o MySql e percebi que em alguns casos a consulta via Entity FrameWork é muito mais lenta que uma consulta em SQL normal via querystring. No geral chega a 30% de tempo.

Verifique a real necessidade da utilização da consulta linq, pois foi obrigado a mudar muitas partes de minha aplicação depois que constatei tal fato.

 

Eu gosto de utilizar o EF para instanciar objetos e fazer alterações ou gerar uma lista pequena de até 30 registros. Acima disso uso o método tradicional.

 

Abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.