1

나는 C#VS.NET 2012으로 작성된 간단한 console app을 가지고 있습니다. Entity Framework 5 (모델 우선)이라는 간단한 데이터베이스를 사용하고 있습니다. 두 개의 테이블 고객이 있습니다. 모든 전자 메일 레코드에는 고객 레코드에 대한 참조가 있습니다.인서트는 시간이 지남에 따라 점점 느려 집니까?

고객 및 이메일 개체를 만들고 EF 컨텍스트의 컬렉션에 저장하고 1000 개의 레코드를 만든 후에 컨텍스트에서 변경 사항 저장을 호출합니다. 1000의 배치는 1000 분의 1 분으로 시작하여 점점 느려지 고 9000 번째의 레코드는 1000 분의 배치가 완료 될 때까지 4 분이 소요됩니다.

CSV 파일의 데이터를 한 번에 한 줄씩 읽은 다음 각 줄마다 간단한 나누기를 수행 한 다음 간단한 개체를 구성하고 있습니다.

제 질문은 EF5인지, 아니면 데이터베이스에 index이 누락 되었습니까? 나는 다른 사전 처리를하고 있지 않다. 나는 SQL Server 1012을 사용하고 있습니다.

+0

확인을 사용하여 객체의 추적을 해제 할 수 있습니다 [이 답변] (http://stackoverflow.com/a/5942176/60108) – Eranga

답변

2

DbContext은 모든 개체를 저장 한 후에도 추적합니다. DbContext의 크기가 응용 프로그램이 느려지는 원인 일 수 있습니다.

1000 삽입 후 DbContext을 처분하고 DbContext을 새로 만드는 것이 좋습니다.

+0

이 개선 된 것을, 그것보다 여전히 3 배 느리다 있지만, SQL 도우미 클래스와 저장된 procs를 사용합니다. 그러나 또 다른 문제가 있습니다. 새로운 레코드가있을 때마다 save를 호출하지 않으면, 해당 컨텍스트의 쿼리가 새로 추가 된 레코드와 아직 저장되지 않은 레코드를 볼 수 없다는 것입니다. – yarning

0

context.Configuration.AutoDetectChangesEnabled = false; 
관련 문제