DbContext 池
DbContext 池
DbContext
通常是一个轻型对象:创建和释放它不涉及数据库操作,而大多数应用程序都可以这样做,而不会对性能产生任何明显的影响。 但是,每个 DbContext
确实设置了执行其职责所必需的各种内部服务和对象,而且在高性能场景中,持续这样做的开销可能很大。 对于这些情况,EF Core 可以将 实例池化:在释放 DbContext
时,EF Core 将重置其状态并将其存储在内部池中;当下次请求新的实例时,将返回该池化实例,而不是设置新的实例。 DbContext
池化允许在程序启动时一次性支付 DbContext
设置成本,而不是持续付费
1 依赖注入
使用 ASP.NET Core 应用EF Core模式涉及通过 将自定义类型注册到 DbContextDbContext容器中 AddDbContext 。 然后,将通过控制器或 Razor Pages 中的构造函数参数获取该类型的实例。
若要启用 DbContext
池,只需将 AddDbContext
替换为 AddDbContextPool :
1 2 | services.AddDbContextPool<BloggingContext>( options => options.UseSqlServer(connectionString)); |
的 参数将池保留的最大实例数 (在 poolSize
AddDbContextPool EF Core 6.0 中默认为 1024,在早期版本中设置为 128) 。 一旦超过 poolSize
,就不会缓存新的上下文实例,EF 会回退到按需创建实例的非池行为。
2.没有依赖注入
使用 ASP.NET Core 应用EF Core模式涉及通过 将自定义类型注册到 DbContextDbContext容器中 AddDbContext 。 然后,将通过控制器或 Razor Pages 中的构造函数参数获取该类型的实例。
若要启用 DbContext
池,只需将 AddDbContext
替换为 AddDbContextPool :
1 2 | services.AddDbContextPool<BloggingContext>( options => options.UseSqlServer(connectionString)); |
的 参数将池保留的最大实例数 (在 poolSize
AddDbContextPool EF Core 6.0 中默认为 1024,在早期版本中设置为 128) 。 一旦超过 poolSize
,就不会缓存新的上下文实例,EF 会回退到按需创建实例的非池行为。
原文:https://docs.microsoft.com/zh-cn/ef/core/performance/advanced-performance-topics?tabs=with-di%2Cwith-constant#dbcontext-pooling
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器