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));

  的 参数将池保留的最大实例数 (在 poolSizeAddDbContextPool 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));

  的 参数将池保留的最大实例数 (在 poolSizeAddDbContextPool 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

 

posted @   zx132797  阅读(278)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
点击右上角即可分享
微信分享提示