> 데이터 베이스 > MySQL 튜토리얼 > 대규모 데이터 세트를 처리할 때 최대 성능을 위해 Entity Framework 삽입을 어떻게 최적화할 수 있습니까?

대규모 데이터 세트를 처리할 때 최대 성능을 위해 Entity Framework 삽입을 어떻게 최적화할 수 있습니까?

Linda Hamilton
풀어 주다: 2025-01-23 22:02:10
원래의
888명이 탐색했습니다.

How Can I Optimize Entity Framework Inserts for Maximum Performance When Dealing with Large Datasets?

대규모 데이터 세트로 Entity Framework 삽입 성능 향상

EF(Entity Framework)에 대규모 데이터 세트를 삽입하면 속도가 느려질 수 있습니다. 이 문서에서는 특히 TransactionScopes를 사용하고 상당한 수의 레코드를 처리할 때 이 프로세스 속도를 크게 높이는 기술을 살펴봅니다.

SaveChanges()통화 최적화

각 레코드에 대해 SaveChanges()을 호출하는 일반적인 관행은 대량 삽입에 비효율적입니다. 대신 다음 대안을 고려해보세요.

  • 일괄 SaveChanges(): 모든 레코드가 컨텍스트에 추가된 후 SaveChanges()을 한 번만 호출하세요.
  • 간격 SaveChanges(): 설정된 레코드 수(예: 100 또는 1000) 후에 SaveChanges()를 호출합니다.
  • 컨텍스트 재활용: SaveChanges()을 호출하여 컨텍스트를 폐기하고 특정 레코드 수 이후에 새 컨텍스트를 생성합니다.

이러한 방법은 데이터베이스 왕복을 줄이고 변경 내용 추적으로 인한 오버헤드를 최소화합니다.

효율적인 대량 삽입 구현

다음 코드는 최적화된 대량 삽입을 보여줍니다.

<code class="language-csharp">using (TransactionScope scope = new TransactionScope())
{
    MyDbContext context = null;
    try
    {
        context = new MyDbContext();
        context.Configuration.AutoDetectChangesEnabled = false;

        int count = 0;
        foreach (var entityToInsert in someCollectionOfEntitiesToInsert)
        {
            ++count;
            context = AddToContext(context, entityToInsert, count, 1000, true);
        }

        context.SaveChanges();
    }
    finally
    {
        if (context != null)
            context.Dispose();
    }

    scope.Complete();
}

private MyDbContext AddToContext(MyDbContext context, Entity entity, int count, int commitCount, bool recreateContext)
{
    context.Set<Entity>().Add(entity);

    if (count % commitCount == 0)
    {
        context.SaveChanges();
        if (recreateContext)
        {
            context.Dispose();
            context = new MyDbContext();
            context.Configuration.AutoDetectChangesEnabled = false;
        }
    }

    return context;
}</code>
로그인 후 복사

이 예에서는 성능 향상을 위해 자동 변경 감지(AutoDetectChangesEnabled = false)를 비활성화합니다. AddToContext 메서드는 변경 사항 커밋을 처리하고 선택적으로 지정된 레코드 수 이후 컨텍스트를 다시 생성합니다.

벤치마크 결과

560,000개의 레코드로 테스트한 결과 극적인 개선이 나타났습니다.

  • 기록별 SaveChanges() : 시간
  • SaveChanges() 100회 기록 후: 20분 이상
  • SaveChanges() 1000개 레코드 이후(컨텍스트 처리 없음): 242초
  • SaveChanges() 1000개 레코드 이후(컨텍스트 처리 포함): 191초

결론

이러한 전략은 Entity Framework 대량 삽입 성능을 크게 향상시킵니다. 대규모 데이터 세트를 효율적으로 처리하려면 변경 내용 추적을 비활성화하고 배치SaveChanges()를 사용하고 컨텍스트를 효과적으로 관리하는 것이 중요합니다.

위 내용은 대규모 데이터 세트를 처리할 때 최대 성능을 위해 Entity Framework 삽입을 어떻게 최적화할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿