> 데이터 베이스 > MySQL 튜토리얼 > 성능 향상을 위해 Entity Framework에서 대량 삽입을 어떻게 최적화할 수 있습니까?

성능 향상을 위해 Entity Framework에서 대량 삽입을 어떻게 최적화할 수 있습니까?

Patricia Arquette
풀어 주다: 2025-01-23 21:52:10
원래의
718명이 탐색했습니다.

How Can I Optimize Bulk Inserts in Entity Framework for Improved Performance?

Entity Framework 대량 삽입 성능 향상: 전략 및 벤치마크

성능 병목 현상을 방지하려면 대규모 데이터 세트를 Entity Framework에 효율적으로 삽입하는 것이 중요합니다. 이 기사에서는 불완전한 거래가 발생하기 쉬운 시나리오인 거래 내에서 4000개의 레코드를 삽입하는 문제를 다룹니다.

잦은 SaveChanges() 통화의 함정 피하기

주요 성능 저하의 원인은 각 레코드에 대해 SaveChanges()을 반복적으로 호출하는 것입니다. 이 접근 방식은 프로세스 속도를 크게 저하시킵니다. 최적화 방법은 다음과 같습니다.

1. 단일 SaveChanges() 호출: 모든 레코드가 추가된 후 단일 SaveChanges() 호출을 실행합니다.

2. 일괄 SaveChanges() 호출: 일괄 처리(예: 100 또는 1000)로 레코드를 삽입하고 각 일괄 처리 후에 SaveChanges()를 호출합니다.

3. 배치 처리를 통한 컨텍스트 처리 SaveChanges():SaveChanges() 호출 후에 새 데이터베이스 컨텍스트 생성과 배치 처리를 결합합니다. 이렇게 하면 컨텍스트가 명확해지고 성능이 더욱 향상됩니다.

최적화된 대량 삽입 패턴:

이 코드는 권장 접근 방식을 보여줍니다.

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

        int count = 0;
        int commitCount = 100; // Adjust as needed
        foreach (var entity in someCollection)
        {
            count++;
            context.Set<entity>().Add(entity);

            if (count % commitCount == 0)
            {
                context.SaveChanges();
                context.Dispose();
                context = new MyDbContext();
                context.Configuration.AutoDetectChangesEnabled = false;
            }
        }
        context.SaveChanges();
    }
    scope.Complete();
}</code>
로그인 후 복사

실적 분석:

560,000개의 항목(9개 스칼라 속성)을 사용한 테스트에서 다음과 같은 결과가 나왔습니다.

  • 증분 SaveChanges()(커밋 횟수 1): > 20분
  • 일괄 처리 SaveChanges()(커밋 횟수 1000): 242초
  • 컨텍스트 처리를 사용한 일괄 처리 SaveChanges()(커밋 수 100): 164초

결론:

빈번한 SaveChanges() 호출을 피하고 컨텍스트 처리가 포함된 일괄 삽입을 활용함으로써 Entity Framework 대량 삽입에서 상당한 성능 향상을 얻을 수 있습니다. 이러한 최적화는 트랜잭션 시간 초과의 위험을 최소화하고 활성 트랜잭션 내에서 효율적인 데이터 처리를 보장합니다.

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

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