为什么从dbContext获取ObjectContext的过程如此之慢?

时间:2018-01-15 22:58:21

标签: entity-framework entity-framework-6

我首先在我的工作中使用Entity Framework Code(6.2)。这种方法的一个最大问题是第一次查询时性能下降。我使用 InteractiveViews nuget包解决了这个问题,但不幸的是,它没有给出预期的生产力增长。

当我尝试使用源代码时,我注意到了

**( dbContext as IObjectContextAdapter).ObjectContext**

我花了很长时间(在我的情况下是8秒)。

问:这么大的延迟是什么原因造成的?这是正常还是有可能以某种方式解决?

1 个答案:

答案 0 :(得分:1)

新的DbContext

创建新的上下文(例如var ctx = new DbContext())不会使模型编译或使用“迁移历史记录”表进行任何数据库验证。

它可能需要500毫秒,因为它JIT编译实体框架中的某些方法或您可以在构造函数中调用的另一个第三个库。

很难知道为什么需要500毫秒,因为它们可能有几个原因。

(dbContext as IObjectContextAdapter).ObjectContext

这样做意味着将调用OnModelCreating方法,并且将首次编译模型。一些查询也将在数据库上执行。

找出答案的最佳方法是进行简单测试,添加一些断点,并让SQL Profiler自行查看:

var ctx = new CurrentContext1();
var objectContext = (ctx as IObjectContextAdapter).ObjectContext;

您将遇到与人们在询问Why Entity Framework First Load is Slow

时通常报告的性能问题相同的问题