Ich habe eine Konsolenanwendung, die über LINQ etwa 150.000 Zeilen in die Datenbank speichert. Das funktioniert gut (wo ich normalerweise erwarten würde, dass es nicht mehr funktioniert). Es ist ein Moor Standard Änderungen speichern, nachdem Daten aus der CSV-Datei zu lesen nennen: -LINQ SaveChanges() außergewöhnlich langsam
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);
Die Tabelle eine Liste von Rechnungen mit einer Unter verknüpften Tabelle von Produkten gegen jede Rechnung ist. Jedes Mal, wenn wir neue Daten erhalten, schreiben wir die neuen Daten ein, markieren sie in der Datenbank als nicht sichtbar, schalten dann die derzeit sichtbaren Daten in unsichtbare und die derzeit unsichtbaren Daten in sichtbare um, was den sofortigen Wechsel von einem Datensatz zu der nächste Datensatz Der gerade als unsichtbar markierte Datensatz wird dann über LINQ gelöscht.
Dies dauert seine Zeit zu löschen, aber nicht eine unangemessene Menge an Zeit. Da diese Daten aus einer CSV-Datei stammen, protokollieren wir die Anzahl der Zeilen und starten und beenden Datum und Uhrzeit des Lesens der Datei. Dies wird in einer anderen Datenbank-Tabelle gespeichert und den Code zu speichern ist: -
importLog.SuccessfullyImportedRows = successfulRows;
importLog.FailedImportedRows = failedRows;
importLog.EndTime = DateTime.Now;
db.SaveChanges();
Dieses retten, nimmt über 40 Minuten und ich habe keine Ahnung, warum. Das einzige, was mir einfällt, ist, dass es dieselbe DBEntities-Klasse verwendet, die verfügbar gemacht wird, wenn das EDMX in Visual Studio generiert wird?
Hat jemand das gehabt? Es gibt das Aussehen der Anwendung hängen, aber es nach 40 Minuten nicht weiter oder so ...
Mögliches Duplikat von [Wie kann ich diese Aufgabe schneller ausführen] (http://stackoverflow.com/questions/37374480/how-can-i-run-this-task-faster) – Veverke
Kann Ihnen helfen, http: // stackoverflow.com/questions/37096509/why-getting-data-with-entity-framwork-is-slow – mohsen
Danke für die Links dort. Letzteres bezieht sich auf SaveChanges() innerhalb einer Schleife, was meine nicht ist. Es ist auch erwähnenswert, dass wenn ich die 177.000 Datensätze speichern, ich in einer lokalen Liste speichern, und dann AddRange() und dann SaveChanges(). Ich rufe die SaveChanges() nur einmal zum Speichern der Liste und ein zweites Mal zum Speichern des Protokolls auf. Kann das selbe Problem auch ohne geloopte SaveChanges() bestehen? –