Ich füge große Anzahl von Datensätzen mit LinqToSql von C# zu SqlServer 2008 Express DB. Es sieht so aus, als wäre die Einfügung sehr langsam. Im Folgenden ist das Code-Snippet.Sehr langsam einfügen Prozess mit Linq zu Sql
public void InsertData(int id)
{
MyDataContext dc = new MyDataContext();
List<Item> result = GetItems(id);
foreach (var item in result)
{
DbItem dbItem = new DbItem(){ItemNo = item.No, ItemName=item.Name};
dc.Items.InsertOnSubmit();
}
dc.SubmitChanges();
}
Mache ich etwas falsch? Oder die Verwendung von Linq zum Einfügen einer großen Anzahl von Datensätzen ist eine schlechte Wahl?
Update: Danke für alle Antworten. @ p.campbell: Sorry für die Datensätze zählen, es war ein Tippfehler, tatsächlich ist es rund 100000. Datensätze reichen auch bis 200k.
Wie alle Vorschläge habe ich diese Operation in Teile (auch eine Änderung der Anforderung und Design-Entscheidung) und Abrufen von Daten in kleinen Stücken und Einfügen in die Datenbank wie und wann es kommt. Ich habe diese InsertData() -Methode in Thread-Operation und jetzt SmartThreadPool zum Erstellen eines Pools von 25 Threads für die gleiche Operation verwenden. In diesem Szenario füge ich jeweils nur 100 Datensätze ein. Jetzt, als ich das mit Linq oder SQL-Abfrage versuchte, machte es keinen Unterschied in Bezug auf die benötigte Zeit.
Gemäß meiner Anforderung wird dieser Vorgang geplant, jede Stunde ausgeführt und Datensätze für ca. 4k-6k Benutzer abgerufen. So, jetzt bin ich Pooling alle Benutzerdaten (Abrufen und Einfügen in DB) Operation als eine Aufgabe und zugeordnet zu einem Thread. Jetzt dauert dieser gesamte Prozess ungefähr 45 Minuten für ungefähr 250.000 Datensätze.
Gibt es einen besseren Weg, diese Art von Aufgabe zu erledigen? Oder kann mir jemand vorschlagen, wie ich diesen Prozess verbessern kann?
Wie viele Datensätze und wie lange dauert der Vorgang? Welche Datentypen werden hier verwendet? –
Mehr als 1000000 Datensätze und meist String-Datentypen, aber nicht mehr als 10 Felder. – JPReddy
Eine Million Einfügungen brauchen Zeit, egal was. Ich vermute, wenn Sie die generierten SQL-Anweisungen, alle 1 Million davon, kopieren und ad-hoc ausführen, sehen Sie keinen großen Unterschied zu Management Studio! –