집 >데이터 베이스 >MySQL 튜토리얼 >성능 향상을 위해 Entity Framework에서 대량 삽입을 어떻게 최적화할 수 있습니까?
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!