【发布时间】:2016-06-20 09:32:32
【问题描述】:
我们使用带有存储库模式的 EF6 来处理数据库数据,并使用 LINQ 来取回数据。 EF 生成的查询在 SSMS 中在 100-120 秒内获取大约 164,000 条记录,并将结果映射回 C# 对象。如果我记录执行所花费的时间,那么将结果具体化为 C# 对象似乎需要时间。以下是 EF 中查询执行的日志详细信息-
在 2016 年 6 月 20 日下午 2:47:04 +05:30 异步打开连接 -- 在 6/20/2016 2:47:04 PM +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
.
.
.
);
Fund 实体里面有很多对象.. Fund 及其子产品如前所述计数在 164000 左右
【问题讨论】:
-
为什么需要实现 164 000 条记录?向最终用户显示如此多的记录没有意义......也许您需要某种分页?
-
你在构建整个对象树吗?运行一个构造函数可能需要 20-40 毫秒,尤其是在它有很多子对象的情况下。 EF不是为了速度,而是为了好用。优化您的代码以获得更好的性能。
-
不,我没有在 UI 上显示它。我将此结果作为导出提供给用户。感谢您的回复。
-
@Dexion - 我尝试用 SP 替换代码,它看起来有一些改进。但是,我想知道从实体框架调用时将查询结果绑定到 C# 对象/实体的过程是如何发生的。我尝试在谷歌上搜索,但我没有得到它。
-
调试代码并在 EF 调用时停止调试器。您将看到一些具有生成名称的运行时生成的类。顺便说一句,这里是源代码:entityframework.codeplex.com/SourceControl/latest
标签: c# linq entity-framework-6 entity