为什么Entity Framework需要4秒才能开始执行查询?

时间:2016-08-04 22:56:43

标签: entity-framework-6

我将实体框架用于我们有一个相当复杂的继承模型并且我们使用Table Per Type Inheritance的应用程序。

这非常有效,因为我们可以只查询基类型并获取具体类型。

缺点是生成的EF查询非常大并且有很多外连接。

现在,获取单个对象的查询大约需要4秒才能返回。有趣的是,实际TSQL的执行只需要〜500ms。我基于EF的输出记录。

我们正在使用此代码来记录控制台:

Database.Log = s =>
{
    Debug.WriteLine(s);
};

在这个例子的日志中,它通常看起来像:

  

于2016年8月4日下午2:59:07 -07:00

打开连接      

[TSQL CODE OUTPUT HERE]

     

- 于2016年8月4日下午2:59:13执行-07:00

     

- 在772毫秒内完成,结果为:SqlDataReader

所以我试图理解为什么开始执行查询需要这么长时间。这只是EF必须工作来生成复杂的SQL语句吗?有没有办法缓存这些语句?

注意:我尝试过实施预编译的视图,并没有改变各个查询的性能。

更新:提出了对象实现的问题,所以我再次测试它并加载了一个不在系统中的id。从打开的连接到查询执行开始仍需要4-7秒。没变。

0 个答案:

没有答案