Inserisco un numero elevato di record utilizzando LinqToSql da C# a SqlServer 2008 Express DB. Sembra che l'inserimento sia molto lento in questo. Di seguito è riportato lo snippet di codice.Processo di inserimento molto lento tramite Linq a 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();
}
Sto facendo qualcosa di sbagliato? O usare Linq per inserire un numero elevato di record è una cattiva scelta?
Aggiornamento: Grazie per tutte le risposte. @ p.campbell: Ci scusiamo per il numero di record, è stato un errore di battitura, in realtà è di circa 100.000. Anche i record vanno fino a 200k.
Come tutti i suggerimenti ho spostato questa operazione in parti (anche una modifica del requisito e la decisione di progettazione) e il recupero dei dati in piccoli blocchi e inserendoli nel database come e quando viene fornito. Ho messo questo metodo InsertData() nell'operazione thread e ora usando SmartThreadPool per creare un pool di 25 thread per fare la stessa operazione. In questo scenario sto inserendo alla volta solo 100 record. Ora, quando ho provato questo con query Linq o sql, non ha fatto alcuna differenza in termini di tempo impiegato.
Secondo le mie esigenze, questa operazione è pianificata per essere eseguita ogni ora e recupera i record per circa 4k-6k utenti. Quindi, ora sto riunendo tutti i dati utente (recuperando e inserendo in DB) come un'operazione e assegnata a un thread. Ora l'intero processo richiede circa 45 minuti per circa 250k di record.
Esiste un modo migliore per eseguire questo tipo di attività? O qualcuno può suggerirmi come posso migliorare questo processo?
quanti dischi e quanto dura l'operazione? Quali tipi di dati vengono utilizzati qui? –
Oltre 1000000 record e principalmente tipi di dati stringa, ma non più di 10 campi. – JPReddy
Un milione di inserti richiederà tempo, non importa quale. Ho il sospetto che se copi le istruzioni SQL generate, tutte 1 milione di esse, e le esegui ad-hoc, non vedrai molto di una differenza perfetta da Management Studio! –