【问题标题】:Entity Framework Core Slow First Time LoadingEntity Framework Core 首次加载缓慢
【发布时间】:2019-02-24 16:43:49
【问题描述】:

我正在处理 Entity Framework Core DbContext 预热时间。我有非常大的 DbContext,我正在使用 AddDbContextPool() 选项注册 DbContexes,该选项将 DbContext 注册为单例,应用程序会重用它。

在早期版本的 EF 中,为了加快应用程序启动时间,应用了以下解决方法:使用缓存 DbModelStore、生成预编译视图和/或使用 NGen 生成实体框架的预编译版本以避免抖动。

但是,我没有看到在 Entity Framework Core 上应用这些的任何有效方法。我什至找不到任何其他方法来避免 DbContext 的初始启动/蠕虫时间。

我们的应用程序的蠕虫启动时间约为 30 多秒。

我尝试在我的应用程序首次启动时初始化 DbContextes,但这似乎是一个优雅或事件负担得起的解决方案。

在 Entity Framework Core 团队 (Github) 上有一个编译视图的功能请求,但是,此功能没有截止日期。

我需要知道是否有任何我可以应用的解决方法和/或解决方案。

谢谢

【问题讨论】:

  • “预热时间”,搞笑的错误!关于主题:为什么您关心预热时间,这应该只在服务器启动后才发生,对吗?当然这不是很好,但是一旦你起来了,性能好吗?
  • 如果我使用 AddDbContext,我会多次遇到蠕虫病毒。但是如果我使用 AddDbContextPool 服务注册是单例的,所以服务运行良好。这发生在第一个请求上,我正在处理高交易项目。因此,第一笔交易需要 30 秒。这是不可接受的。
  • 看来你没有使用正确的工具来解决你的问题......也许你应该考虑使用像 Dapper 这样的工具。 EF 并不以其出色的速度和性能而闻名。不幸的是,我没有足够的经验来解决这些问题,无法更具体地帮助您。
  • 确定这与您的网络服务器配置无关?使用 IIS 时,您可以在应用程序池设置下将“空闲时间”设置为“0”——不同的 Web 服务器可能有类似的设置。
  • 我将看看我的 Web 服务器配置。将 Idle Timeout 更改为 0 肯定会有所帮助。让我们看看

标签: c# asp.net-core .net-core ef-core-2.0


【解决方案1】:

第一次启动很慢,因为 EF 配置了表映射。您可以做的最重要的事情是重新设计您的 dbcontext。您必须将配置拆分到不同的上下文中。一个上下文必须包含很少的实体,在含义上相关联(就像在 DDD 中所做的那样)。例如。 UserDbContext(用于授权。提供用户、令牌、personalData...)、CustomerDbContext(提供所有客户数据:客户、联系人、合同、优惠...)

【讨论】:

    【解决方案2】:

    我遇到了 dbContext 预热时间的问题,因为我们有一个非常大的 dbContext,或者我应该说有。为了解决这个问题,我们现在为应用程序的不同部分提供了多个 dbContext。强烈推荐它。

    然后使用旧的数据注释 [NotMapped] 属性来关闭您的 dbcontexts。 DBContext slow when initially building

    【讨论】:

      猜你喜欢
      • 2017-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-28
      • 2023-03-29
      • 1970-01-01
      • 2020-12-09
      • 2021-06-24
      相关资源
      最近更新 更多