EF6需要时间来获取结果

时间:2016-06-20 09:32:32

标签: c# linq entity-framework-6 entity

我们使用具有存储库模式的EF6来处理数据库数据并使用LINQ来获取数据。 EF生成的查询在SSMS中以100-120秒的速度读取大约164,000条记录,并将结果映射回C#对象。如果我记录执行所花费的时间,那么将结果具体化到C#对象似乎需要时间。以下是EF-

中查询执行的日志详细信息

在2016年6月20日下午2:47:04 +05:30异步打开连接 - 于2016年6月20日下午2:47:04 +05:30异步执行 - 在8730毫秒内完成,结果为:SqlDataReader 我的问题是 - 为什么EF花时间将结果映射回C#对象。

更多细节 -

_fundRepository.GetAllIncluding(f => f.Funds.Select(l => l.Location),
                    f => f.Brand).Select(f => new
//properties selection from above entities
.
.
.
);

基金实体中有很多对象。如上所述,基金及其子产品数量约为164000

2 个答案:

答案 0 :(得分:0)

你可以使用任务来增加查询的性能,如

Task.Run(()=>_fundRepository.GetAllIncluding(f => f.Funds.Select(l => l.Location),
                    f => f.Brand).Select(f => new
//properties selection from above entities
.
.
.
));

Improve query performance

答案 1 :(得分:0)

如果这是一个只读操作,将AsNoTracking放入请求中可能会加快性能,尤其是在检索到大量记录时。

很可能需要进入你的GetAllIncluding方法。

https://msdn.microsoft.com/en-us/data/jj556203.aspx

和第5.1.1节: https://msdn.microsoft.com/en-us/data/hh949853.aspx#5