1
resposta

Dúvidas em relação a performance

Boa tarde,

Minha dúvida é em relação a performance do Linq to entities. Percebi durantes as aulas que ele gera scripts um pouco estranho, muitas vezes ele faz "subqueries", não sei bem se isso é correto.

A questão é: Linq to Entities é indicado para qualquer tamanho de projeto? Vamos imaginar um site de notícias do porte do G1, o qual tem muitos acessos simultâneos, Linq daria conta?

Obrigado.

1 resposta

Olá, Bruno!

Como visto no curso, você pode usar o LinqPad (https://www.linqpad.net/) para ver as queries geradas pelo LINQ to Entities e assim "atacar" possíveis problemas de desempenho.

As questões de performance do LINQ to Entities estão mais relacionadas ao Entity Framework do que ao próprio LINQ, e por esse motivo não pudemos nos aprofundar nesse assunto.

Como criamos consultas indiretamente no Entity Framework (que são traduzidas para SQL Server ou outro sistema de banco de dados relacional), o desempenho das consultas geradas dependem muito de configurarmos corretamente o EF para otimizá-lo, através de índices, views, caching, mapeamento correto, restrição do tamanho dos objetos usados nas consultas, se estamos ou não baixando os objetos relacionados em "cascata", se estamos usando conexões e transações adequadamente, etc.

Resumindo: precisamos fazer direito. Se você está preocupado com quantos milissegundos cada consulta irá gastar, então você precisa abrir a consulta T-SQL gerada e usar o SQL Server Management Studio para verificar o plano de execução gerado. O plano de execução de uma consulta mostra o algoritmo interno para geração da consulta, e dá pistas importantes que indicam se precisamos criar ou remover índices, por exemplo.

Só essas configurações do Entity Framework podem render assunto para um curso, no mínimo. A Microsoft criou uma página sobre esse tópico: Considerações sobre desempenho (Entity Framework)

https://msdn.microsoft.com/pt-br/library/cc853327(v=vs.110).aspx

Então respondendo sua pergunta: sim, um site como o G1 poderia usar o Entity Framework, desde que bem configurado e ajustado. Porém, devemos lembrar que grandes projetos não usam uma solução "100% banco relacional". Geralmente eles usam também bancos de dados NoSQL, MongoDB, caches com Redis, ElasticSearch, entre outras tecnologias, porque consultas ao banco de dados relacional como SQL Server ou Oracle em geral custa mais e demora mais do que simplesmente consultar um dado num banco NoSQL como MongoDB, Redis ou ElasticSearch. Então o Entity Framework seria apenas uma das várias tecnologias de acesso a dados de um site como esse.

Obrigado por prestigiar nosso curso!