【问题标题】:Should I use AddDbContext or AddDbContextPool我应该使用 AddDbContext 还是 AddDbContextPool
【发布时间】:2022-01-07 05:15:25
【问题描述】:

我有一个使用 EF Core 5.0.12 的 Web API。我使用 swagger Web 界面进行调试。我注意到我第一次大摇大摆地调用特定的控制器动作时它很慢(六秒或更长时间)。对同一操作的后续调用要快得多。我不完全确定招摇的调用如何变得更快。在我的 Asp.Net Core SPA 中,对 API 的调用似乎每次都很慢。

这让我开始思考......因为,Asp.Net Core 默认情况下会在每次调用后处理实体上下文,我是否会受益于使用DbContext Pooling 来避免每次编译 EF 查询?

我知道之前的 SO 问题 here。但由于我使用的是最新的稳定版本的 Ef Core 和 Asp.Net Core,这似乎有点过时了,给定的答案是否仍然适用?

【问题讨论】:

  • 我通常不担心初始点击速度很慢。这是由于机器之间网络中的初始握手或某处缓存。无论是在数据库端、应用程序端,甚至是浏览器端(用于图像和内容)。
  • 我刚刚又看了一遍你所说的关于你的 SPA 的内容,每个请求似乎都很慢?您应该添加一些基准测试,以了解您的减速到底在哪里。

标签: c# asp.net-core entity-framework-core


【解决方案1】:

第一次调用需要更长的时间可能是因为正在启动与数据库的连接。之后,它使用Connection pooling 为后续请求重用相同的连接。

值得一提的是DbContext 使用了一个底层连接对象,但是每个请求都会创建一个新的 DbContext 并不意味着建立一个新的连接 TCP 握手。因此,仅将 DbContext 替换为 DbContextPool 可能不会有任何明显的性能改进。

【讨论】:

    猜你喜欢
    • 2018-07-04
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    • 2015-10-16
    • 2023-03-06
    • 2013-02-20
    • 2011-07-31
    相关资源
    最近更新 更多