为什么Entity Framework在join语句中这么慢?

时间:2015-07-17 14:38:04

标签: entity-framework entity-framework-6

我有一个EF 6查询,其中包含大约6个linq连接语句。当我使用调试器逐步执行代码时,我可以看到查询语句大约需要6秒才能运行。使用SQL跟踪,我可以告诉实际查询,看起来像我期望的那样,需要0 ms并返回0行。我逐个删除了连接语句。删除每个连接语句后,EF语句的执行时间缩短了1秒。查询的选择部分从未更改,只有连接数。

我的问题是,发生了什么?什么是EF,它需要这么多时间来处理这个查询?奇怪的是,看起来大部分时间实际上是在SQL执行完成后花费的,​​所以时间不是生成查询,而是随后EF正在做什么。

1 个答案:

答案 0 :(得分:0)

您是否正在使用延迟加载并逐个初始化每个连接?如果要在6个大型数据集上调用6个连接,这些数据集返回大小合适的对象,则速度很慢。这可能需要很长时间,因为您返回的数据集可能非常大,而您正在执行此操作6次。我在网页上使用ajax过滤的大型数据集和表格遇到了这个问题。通过利用延迟加载和一起构建我的所有quire然后只初始化一次,我能够大大提高性能。 我猜最终在6个连接后你想要一个由所有这些连接组成的数据集。您希望将这些连接构建到一个查询中,并且只针对您的数据库触发一次,因此EF只需将对象构建到您的代码中一次。