我们使用具有存储库模式的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
答案 0 :(得分:0)
你可以使用任务来增加查询的性能,如
Task.Run(()=>_fundRepository.GetAllIncluding(f => f.Funds.Select(l => l.Location),
f => f.Brand).Select(f => new
//properties selection from above entities
.
.
.
));
答案 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