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
标签:Core,EF,DbContext,实例,AddDbContextPool,AddDbContext From: https://www.cnblogs.com/Leo_wl/p/17007291.html