EF查询之性能优化问题

sinat_38913556 2018-06-13 10:42:06
本人新手
用EF写查询
发现 写法不同 运行速率差好多

我之前写过

DemoEntities content = new DemoEntities();
List<T> list = content.Test.toList();
//逻辑代码
list = list.where(c=>c.id==id);


其中Test这个视图大约有30W条数据 我这种写法要耗时4S
然后换了一种写法


//逻辑代码
list = content.where(c=>c.id==id).Test.toList();

耗时 0.5S

不明白为什么差距会这么大
...全文
403 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
正常来说都是在最终要实际取数据的时候才执行终结方法(ToList,foreach之类的),当然可能有些情况需要提前取出数据,然后程序里才能做一些后续处理
sinat_38913556 2018-06-13
  • 打赏
  • 举报
回复
引用 2 楼 wanghui0380 的回复:
tolist,请去博客园上看 IEnumerable<T>和IQueryable<T>到底有啥区别 弄清楚他们的区别了,我们不解析你自己都知道why
以后用EF 是不是这样写比较好 去到最终数据之后 在ToList

DemoEntities content = new DemoEntities();
var temp = content.Test;
//逻辑代码
temp = temp.where(c=>c.id==id);
List<Test> list  = temp.ToList();
sinat_38913556 2018-06-13
  • 打赏
  • 举报
回复
完了 以前不懂这些东西 滥用ToList() 程序里全是这么写的 感觉好傻
  • 打赏
  • 举报
回复
content.Test.toList().where(c=>c.id==id);//你这是所有数据都拉出来了在程序里再做筛选
content.Test.where(c=>c.id==id).toList()//这是只取了id这个值
另外EF查询不需要追踪的话可以加AsNoTracking,这样还可以提高性能
wanghui0380 2018-06-13
  • 打赏
  • 举报
回复
tolist,请去博客园上看 IEnumerable<T>和IQueryable<T>到底有啥区别 弄清楚他们的区别了,我们不解析你自己都知道why
  • 打赏
  • 举报
回复
数据的序列化,耗费大量时间。时间不是花在查询上,时间都花在你把多余的数据加载到(序列化、反序列化到)进程里的时间上了。

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧