본문 바로가기
프로그래밍/C#

AddDbContextPool 과 AddPooledDbContextFactory

by 뽀도 2024. 7. 1.

 

- AddDbContextPool 과 AddPooledDbContextFactory 는 모두 Entity Framework Core에서 DbContext 인스턴스를 풀링(pooling)하여 성능을 최적화 하는데 사용. 

 

그러나 이 둘은 약간의 차이가 있음 

 

1. AddDbContextPool

  • 역할: AddDbContextPool은 DbContext 인스턴스를 풀링하여 재사용합니다.
  • 이는 주로 단일 인스턴스의 수명이 요청(request) 당 한 번인 웹 애플리케이션 시나리오에 적합합니다.
  • 사용법: DbContext를 애플리케이션 서비스로 등록하여 풀링을 활성화합니다.
  • 구현 예:
    services.AddDbContextPool<MyDbContext>(options =>
        options.UserMySql("YourConnectionString"));
  • 특징: 기본적으로 풀링된 DbContext는 HTTP 요청의 범위(scope) 내에서 사용됩니다. 같은 요청 내에서는 동일한 DbContext 인스턴스를 재사용합니다.

2. AddPooledDbContextFactory

  • 역할: AddPooledDbContextFactory는 DbContext 인스턴스를 생성하는 팩토리를 풀링합니다. 이는 주로 단일 요청 내에서 여러 DbContext 인스턴스가 필요할 때 유용합니다.
  • 사용법: DbContext를 생성할 팩토리 서비스를 등록하여 풀링을 활성화합니다.
  • 구현 예:
    services.AddPooledDbContextFactory<MyDbContext>(options =>
        options.UseSqlServer("YourConnectionString"));

  • 특징: 여러 DbContext 인스턴스가 필요한 상황에서도 각 인스턴스를 팩토리에서 생성하여 풀링된 인스턴스를 재사용할 수 있습니다. 예를 들어, 단일 요청 내에서 여러 스레드가 각각의 DbContext 인스턴스를 사용해야 할 때 유용합니다.

3. 차이점 요약

  1. 서비스 등록 방식:
    • AddDbContextPool은 DbContext 인스턴스를 직접 풀링하여 서비스로 등록합니다.
    • AddPooledDbContextFactory는 DbContext 팩토리를 풀링하여 서비스로 등록합니다.
  2. 사용 시나리오:
    • AddDbContextPool은 주로 단일 요청에서 단일 DbContext 인스턴스를 사용할 때 적합합니다.
    • AddPooledDbContextFactory는 단일 요청에서 여러 DbContext 인스턴스가 필요할 때 적합합니다.
  3. 코드 예:
    • AddDbContextPool:
      services.AddDbContextPool<MyDbContext>(options => options.UseMySql("YourConnectionString"));
       
    • AddPooledDbContextFactory:
services.AddPooledDbContextFactory<MyDbContext>(options => options.UseMySql("YourConnectionString"));

 

반응형

댓글