C#和LINQPad之间的Linq查询性能
在我的应用程序中,使用以下linq查询:C#和LINQPad之间的Linq查询性能,c#,performance,linq,entity-framework,linqpad,C#,Performance,Linq,Entity Framework,Linqpad,在我的应用程序中,使用以下linq查询: var r = from uev in UtilisateurEpisodeVus group uev by uev.Episode.Saison.Serie into pgroup let count = pgroup.Count() orderby count descending select new SerieVu() { nombreDeVus = count, Serie = p
var r = from uev in UtilisateurEpisodeVus
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
return r.ToList();
在LINQPad中,使用与实体框架相同的连接使用大致相同的查询:
from uev in UtilisateurEpisodeVus
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select pgroup.Key
在我的申请中:
resultat.ToList()
大约需要45秒
在LINQPad中,需要191毫秒
有什么问题吗?谢谢您的帮助,我已经找到了使用Entity Framework Profiler试用版的解决方案。。事实上,我是这样做的:
IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu = Query(uev => uev.userepivu_date > dateIlYaSeptJours);
var resultat =
from uev in listUtilisateurEpisodeVu
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
在我的linq查询中直接使用查询,性能非常好。。。我不明白为什么。如果有人有任何想法,我很高兴知道答案。再次感谢您的帮助我已经找到了使用Entity Framework Profiler试用版的解决方案。。事实上,我是这样做的:
IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu = Query(uev => uev.userepivu_date > dateIlYaSeptJours);
var resultat =
from uev in listUtilisateurEpisodeVu
group uev by uev.Episode.Saison.Serie into pgroup
let count = pgroup.Count()
orderby count descending
select new SerieVu() { nombreDeVus = count, Serie = pgroup.Key };
在我的linq查询中直接使用查询,性能非常好。。。我不明白为什么。如果有人有任何想法,我很高兴知道答案。再次感谢你说的话
IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
from uev in Query(uev => uev.userepivu_date > dateIlYaSeptJours)
group uev
您正在对一个IQueryable
进行分组,该分组转换为对System.Linq.Queryable.GroupBy
的调用,该调用被转换为sql并发送到数据库
通过更改变量的类型,可以获得相同的结果:
IQueryable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
IQueryable列表利用UREPISODEVU
来自列表中的uev利用率
组uev
当你说
IEnumerable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
from uev in Query(uev => uev.userepivu_date > dateIlYaSeptJours)
group uev
您正在对一个IQueryable
进行分组,该分组转换为对System.Linq.Queryable.GroupBy
的调用,该调用被转换为sql并发送到数据库
通过更改变量的类型,可以获得相同的结果:
IQueryable<UtilisateurEpisodeVu> listUtilisateurEpisodeVu
from uev in listUtilisateurEpisodeVu
group uev
IQueryable列表利用UREPISODEVU
来自列表中的uev利用率
组uev
比较EF使用SQL Profiler为应用程序生成的SQL(或上下文中的日志属性)和Linqpad中的SQL选项卡。您可能会看到一些差异。感谢您的帮助,DaveShaw比较EF使用SQL Profiler为您的应用程序生成的SQL(或上下文中的日志属性)和Linqpad中的SQL选项卡。您可能会看到一些差异。感谢您的帮助DaveShawNow我知道了原因:我的查询方法返回IQueryable接口,并在不将结果转换为IEnumerable的情况下使用它避免数据库调用。如果我用IQueryable替换IEnumerable,则性能相同。现在我知道了原因:我的查询方法返回一个IQueryable接口,并且在不将结果转换为IEnumerable的情况下使用它,从而避免了数据库调用。如果我用IQueryable替换IEnumerable,则性能相同。希望能有所帮助