【问题标题】:Any way to remedy EF slow startup?有什么办法可以解决 EF 启动缓慢的问题吗?
【发布时间】:2014-09-08 09:57:07
【问题描述】:

我正在为我的 EF 5 项目使用旧版 ObjectContext。与项目一样,该项目自开始以来已经显着增长,现在我们坐在大约 400 个表中,以及一些也包含在 edmx 模型中的视图。一切都很好......但是对于试图调试东西并且必须等待一分钟以上才能准备好网站运行的程序员和测试人员来说,冷启动时间已经成为一个真正的问题以及 QA 和生产构建的用户,他们同样必须等待很长时间才能准备好使用每个新部署。

我们还有一个开发路线图,它将向我们的数据库添加更多表。所以这个问题只会变得更糟。

我们可以做些什么来加快我们的启动时间吗?切换到DbContext 会有帮助吗?如果是这样,对于使用ObjectContext 的现有代码会有多大的破坏性?

【问题讨论】:

  • @MarcGravell,我刚刚在那里阅读了你的答案,我明白了要点,但不知道它是如何在实践中完成的。你能具体说明你将如何做到这一点吗?也许在这里作为答案?
  • DBContext 只是 ObjectContext 的一个包装器。您仍然可以通过 DBContext 获得对 ObjectContext 的引用。所以我怀疑这会加速任何事情。
  • 需要考虑的是你是如何加载你的对象的?懒惰还是渴望? Lazy 可以在使用相关对象时创建对 DB 的额外调用。试着关掉一点。例如。而不是玩弄 IQueryable 对 List 的更改。
  • @PaulZahra,所有关系属性都是延迟加载的。但是加载数据库时并不慢;这是缓存数据模型的启动时间,加上第一次连接到数据库的时间。

标签: c# entity-framework asp.net-mvc-4 sql-server-2012 entity-framework-5


【解决方案1】:

要回答您的问题,是的,您可以做很多事情来加快启动时间,例如使用预生成视图(仅适用于 DbContext)、使用外键关联来降低视图生成成本以及移动您的模型到一个单独的程序集。

例如 “当您的模型直接包含在应用程序的项目中并且您通过预构建事件或 T4 模板生成视图时,无论何时重建项目,都会生成视图和验证,即使模型没有更改。如果您将模型移动到单独的程序集并从应用程序的项目中引用它,您可以对应用程序进行其他更改,而无需重新构建包含模型的项目。”

Read this lengthy MSDN Performance Considerations for EF4, EF5, EF6 article.

DBContext 只是 ObjectContext 的一个包装器。您仍然可以通过 DBContext 获得对 ObjectContext 的引用。所以我怀疑这会加速任何事情,如果有的话,它可能会减慢速度。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2023-01-26
    • 2020-12-29
    相关资源
    最近更新 更多