我在我的工作中首先使用实体框架代码(6.2(。这种方法的最大问题之一是首次查询时性能缓慢。我使用 InteractiveViews nuget 包来解决此问题,但不幸的是,它没有提供预期的生产力增长。
当我尝试源代码时,我注意到
**( dbContext as IObjectContextAdapter).ObjectContext**
花了我很长时间(在我的情况下为 8 秒(。
问:这么大的延迟是什么原因?这是正常的还是有可能以某种方式解决?
新的 DbContext
创建新上下文(如 var ctx = new DbContext()
(不会使模型被编译或使用"迁移历史记录"表执行任何数据库验证。
这可能需要 500 毫秒,因为它JIT
编译实体框架中的某个方法或您可能在构造函数中调用的另一个第三个库。
很难知道为什么需要 500 毫秒,因为他们可能有几个原因。
(dbContext as IObjectContextAdapter(。对象上下文
这样做意味着将调用 OnModelCreating
方法,并且首次编译模型。一些查询也将在数据库上执行。
答案的最佳方法是进行一个简单的测试,添加一些断点,并使 SQL 事件探查器能够自行查看它:
var ctx = new CurrentContext1();
var objectContext = (ctx as IObjectContextAdapter).ObjectContext;
您将遇到与人们通常在询问为什么实体框架首次加载缓慢时报告的性能问题相同的问题