AddDbContextPool 是 EF Core 为高并发轻量操作设计的 DbContext 实例复用机制,适用于 QPS>100 的 Web API 场景,需避免长期持有、手动共享及低并发滥用。
EF Core 的 AddDbContextPool 是专为高并发场景设计的性能优化手段,它通过复用 DbContext 实例减少创建/销毁开销,而不是每次请求都新建一个上下文。它不是“万能加速器”,是否启用、如何配置,得看你的应用负载特征。
池化真正起作用的前提是:请求密集、单次操作轻量、DbContext 生命周期短(如 Web API 的每个 HTTP 请求)。典型适用场景包括:
只需替换常规的 AddDbContext 为 AddDbContextPool,其余配置方式一致:
Program.cs(.NET 6+)
builder.Services.AddDbContextPool(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("Default")));
如果需要自定义池大小(默认 1024),可传入 poolSize 参数:
builder.Services.AddDbContextPool(options =>
options.UseSqlServer(connectionString)
, poolSize: 256);
注意:poolSize 不是并发上限,而是“最多缓存多少个干净实例”。超出后 EF Core 会退回到非池化模式(即每次 new 一个),不会报错但失去池化收益。
启用池化后,EF Core 会在每次归还实例时自动执行清理,确保下一次租用时是干净的:
ChangeTracker:所有被跟踪的实体状态清空盲目开启池可能带来反效果或隐患:
基本上就这些。用不用池,先压测对比;怎么调大小,看监控中的租用等待率和 GC 压力——不复杂但容易忽略。