LINQ를 통해 약 150,000 개의 행을 데이터베이스에 저장하는 콘솔 어플리케이션이 있습니다. 이것은 잘 작동합니다 (정상적으로 작동을 멈출 것으로 예상하는 곳). 변화가 CSV 파일에서 데이터를 읽은 후 전화 저장이 늪지 표준입니다 : -LINQ SaveChanges() 예외적으로 느림
List<Invoice> oldInvoices = db.Invoices.Where(x => !x.IsVisible).ToList();
List<int> oldInvoiceIDs = oldInvoices.Select(s => s.InvoiceID).ToList();
List<InvoiceProduct> allInvoiceProducts = db.InvoiceProducts.ToList();
List<InvoiceProduct> oldInvoiceProducts = allInvoiceProducts.Where(x => oldInvoiceIDs.Contains(x.InvoiceID)).ToList();
db.InvoiceProducts.RemoveRange(oldInvoiceProducts);
db.Invoices.RemoveRange(oldInvoices);
UpdateConsole.WriteLine("Switching over invoices completed. Please wait...", ConsoleColor.Black, ConsoleColor.Magenta);
표는 각 송장에 대한 제품의 하위 연결된 테이블과 송장의 목록입니다. 새로운 데이터를 얻을 때마다 새로운 데이터를 쓰고 보이지 않는 상태로 데이터베이스에 표시 한 다음 현재 표시된 데이터를 보이지 않게 전환하고 현재 보이지 않는 데이터를 표시되도록 설정하여 하나의 데이터 세트에서 다음 데이터 세트. 이제는 보이지 않는 것으로 표시된 데이터 세트가 LINQ를 통해 삭제됩니다.
시간이 오래 걸리지 만 부당한 시간은 아닙니다. 이 데이터는 CSV 데이터 파일에서 가져온 것이므로 행 수, 파일 읽기 시작 및 종료 날짜 및 시간을 기록합니다.
importLog.SuccessfullyImportedRows = successfulRows;
importLog.FailedImportedRows = failedRows;
importLog.EndTime = DateTime.Now;
db.SaveChanges();
이 저장 40 분 초과 을 받아 내가 왜 아무 생각도 없어 -이 다른 데이터베이스 테이블 및 저장 코드에 저장되어 있습니다. 내가 생각할 수있는 유일한 것은 Visual Studio에서 EDMX를 생성 할 때 사용할 수있는 동일한 DBEntities 클래스를 사용하고 있다는 것입니다.
아무도 없습니까? 이 응용 프로그램 매달려의 모양을 제공하지만 ... 40분 정도 후 계속 않습니다
[가능한 빨리 수행 할 수있는 방법] (http://stackoverflow.com/questions/37374480/how-can-i-run-this-task-faster) – Veverke
http : // 도움이 될 수 있습니다. stackoverflow.com/questions/37096509/why-getting-data-with-entity-framwork-is-slow – mohsen
거기에 링크 주셔서 감사합니다. 후자는 루프 내에서 SaveChanges()에 관한 것이고, 내에서는 그렇지 않습니다. 또한 177,000 개의 레코드를 저장할 때 로컬 목록에 저장 한 다음 AddRange()를 실행 한 다음 SaveChanges()를 수행합니다. 목록을 저장하기 위해 SaveChanges()를 한 번만 호출하고 로그를 저장하기 위해 두 번째로 SaveChanges()를 호출합니다. 동일한 문제가 루프 된 SaveChanges() 없이도 여전히 존재할 수 있습니까? –