`DbContextPool` Connection & Object Pooling
1Concept
Creating a new `DbContext` per HTTP request involves object instantiation and state initialization. `AddDbContextPool` pools reusable `DbContext` instances, recycling them after each request.
2Architecture Diagram
HTTP Request Starts ──> Rents clean DbContext from DbContextPool
│
HTTP Request Ends ──> Resets state & returns DbContext to pool (Zero GC Allocations!)3Code Example
C# 13 & .NET 9
using System;
public class DbContextPoolConceptDemo
{
public static void Main()
{
Console.WriteLine("DbContext Pooling setup:");
Console.WriteLine("builder.Services.AddDbContextPool<AppDbContext>(options => {");
Console.WriteLine(" options.UseNpgsql(connectionString);");
Console.WriteLine("}, poolSize: 128);");
}
}4Expected Output
DbContext Pooling setup:
builder.Services.AddDbContextPool<AppDbContext>(options => {
options.UseNpgsql(connectionString);
}, poolSize: 128);5Key Takeaways
- ✓Use `AddDbContextPool` instead of `AddDbContext` for high-load web APIs.
- ✓DbContext state (ChangeTracker) is reset automatically when returned to the pool.
- ✓Do not store custom state fields inside pooled DbContext classes.