【发布时间】:2016-10-24 10:01:36
【问题描述】:
我们在实体框架中使用视图。当我在 SQL Server 中执行程序视图时,它在 2 秒内快速呈现。我创建了简单的 linq 查询 / lambda 表达式来获取输出或应用程序,但获得最终结果需要 2 多分钟。我不确定相同的视图如何在后端(SQL Server)中快速运行,当我通过实体框架使用它时会产生问题。
C#
this.db.progamview.Where(x =>
x.pId== 6&&
x.qId== 12
&& x.RId== 20151
&& x.cId== 102)
我已尝试设置超时,但仍然无法正常工作。当我们处理大型数据集或如何处理 EF 中检索大型数据集的视图时,我们有哪些方法可以提高 Entity Framework 的性能?
尝试了如下AsNotracking 方法,但没有成功。
this.db.progamview.Where(x => x.pId== 6 && x.qId== 12 && x.RId== 20151 && x.cId==
102).AsNoTracking();
Version: EF6.1
它返回 18 列。我需要在前端显示所有列。
尝试了以下方法,但仍然为时已晚。即需要 4-5 分钟才能得出结果。
上下文中的超时属性
AsNotracking方法
下面的客户统计截图
还有其他更好的方法来提高性能吗?
【问题讨论】:
-
sql server 返回多少列多少行?以及传输了多少字节?
-
@fredou 更新问题
-
您能提供确切的数字吗?您可以发布客户端统计信息的屏幕截图吗? (来自sql管理工作室)
-
您真的需要将所有 42000 行 x 18 列序列化到托管内存中吗?向用户显示所有数据的用例是什么?考虑在查询中使用带有 Skip(pagesize*pages).Take(pagesize) 等的分页,并在网格中显示用户有意义的数据。
-
我建议尽可能在 sql server 上进行较重的操作。对于计算,sql server 将提供比将所有内容加载到托管内存然后在内存中执行操作更好的结果。
标签: c# entity-framework linq