【问题标题】:Entity Framework startup time实体框架启动时间
【发布时间】:2012-06-22 13:39:30
【问题描述】:

我想知道是否可以先加速使用 EF 代码进行的第一个查询。

我做了一个小测试程序,一个实体包含 2 个字段,第一个查询需要 2.2 秒,第二个查询(完全相同)需要 0.006 秒。

我已经在预编译视图,所以这里没有帮助。 我认为问题在于在内存中构建模型需要一些时间,但是需要那么长时间吗?有没有办法像视图一样预编译这个模型?

【问题讨论】:

  • 不认为这是可能的,但我可能错了。查看此问题以了解第一次查询期间发生的情况stackoverflow.com/questions/5634338/…
  • @RaphaëlAlthaus 您可能是对的:/ 这很奇怪。您可以使用 DbModelBuilder 类构建自己的模型,然后在该对象上调用 Build 方法,因此应该可以这样做在编译时而不是运行时。但也许它只是没有实现。
  • 检查数据库架构兼容性可能需要一些时间。您可以使用 SQL 分析器进行检查。
  • 这就是我们切换回 EDMX 的原因。虽然它不是很快,但肯定比先编码更快。代码优先也是检查数据库结构以执行迁移等。普通 EDMX 立即开始执行查询。

标签: performance entity-framework code-first startup precompiled


【解决方案1】:

本文:Squash Entity Framework startup time with pre-compiled views 详细描述了一个解决方案。

它涉及使用 Entity Framework Power Tools 中的优化实体数据模型选项来生成预编译的 .Views 类文件。

【讨论】:

  • 我已经尝试过了,但现在我按照您链接到的文章中的步骤进行操作。视图正在生成,但第一次访问仍然很慢。我做了一个小测试。首先,我使用普通的 SqlConnection 和 SqlCommand 访问数据库。需要 0.2 秒。之后我使用 EF 并做类似的事情 (con.Users.Count();)。这需要 3.08 秒..!然后我再次运行完全相同的代码行,从现在开始只需要 0.007 秒。所以很明显 EF 在你第一次访问数据库时正在做一些事情而不是生成视图。
【解决方案2】:

当您进行第一次查询时,EF 会自行初始化,这需要一些时间。我认为加快 EF 的基础架构初始化没有太多工作要做,但是,如果您真正想要的是加快您所做的第一个查询而不是 EF 的初始化本身,那么您可以尝试强制 EF 进行初始化运行您的第一个查询之前。

        using (var db = new MyContext())
        {
            db.Database.Initialize(force: true);
        }

【讨论】:

  • force=true 会强制重新初始化,即使之前已经初始化了它的基础结构/内部结构,所以不要使用 force:true 除非您更改了连接字符串或表结构。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多