Estoy insertando una gran cantidad de registros usando LinqToSql desde C# a SqlServer 2008 express DB. Parece que la inserción es muy lenta en esto. Lo siguiente es el fragmento de código.Proceso de inserción muy lento utilizando 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();
}
¿Estoy haciendo algo mal? ¿O utilizar Linq para insertar una gran cantidad de registros es una mala elección?
Actualización: Gracias por todas las respuestas. @ p.campbell: Lo siento por la cantidad de registros, fue un error tipográfico, en realidad es alrededor de 100000. Los registros también oscilan hasta 200k también.
De acuerdo con todas las sugerencias moví esta operación en partes (también un cambio de requisito y una decisión de diseño) y recupero datos en trozos pequeños y los inserto en la base de datos cuando se presenta. He puesto este método InsertData() en la operación de subprocesos y ahora usando SmartThreadPool para crear un grupo de 25 subprocesos para hacer la misma operación. En este escenario, estoy insertando a la vez solo 100 registros. Ahora, cuando intenté esto con la consulta de SQL o SQL, no hizo ninguna diferencia en términos de tiempo.
Según mi requerimiento, esta operación está programada para ejecutarse cada hora y recupera registros para alrededor de 4k-6k usuarios. Entonces, ahora estoy agrupando cada operación de datos de usuario (recuperación e inserción en DB) como una tarea y asignada a un hilo. Ahora todo este proceso toma alrededor de 45 minutos para alrededor de 250k registros.
¿Hay alguna forma mejor de realizar este tipo de tareas? ¿O alguien puede sugerirme cómo puedo mejorar este proceso?
¿cuántos registros y cuánto tiempo dura la operación? ¿Qué tipos de datos se están utilizando aquí? –
Más de 1000000 registros y la mayoría de los tipos de datos de cadenas pero no más de 10 campos. – JPReddy
Un millón de inserciones llevará tiempo, pase lo que pase. ¡Sospecho que si copias las declaraciones SQL generadas, las 1 millón de ellas, y las ejecutas ad-hoc, no verás una gran diferencia de rendimiento de Management Studio! –