Estoy procesando 1 millón de registros en mi aplicación, que recupero de una base de datos MySQL. Para hacerlo, estoy usando Linq para obtener los registros y uso .Skip() y .Take() para procesar 250 registros a la vez. Para cada registro recuperado, necesito crear de 0 a 4 elementos, que luego agrego a la base de datos. Entonces, la cantidad promedio de ítems totales que debe crearse es de alrededor de 2 millones.Sin memoria al crear muchos objetos C#
IQueryable<Object> objectCollection = dataContext.Repository<Object>();
int amountToSkip = 0;
IList<Object> objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
while (objects.Count != 0)
{
using (dataContext = new LinqToSqlContext(new DataContext()))
{
foreach (Object objectRecord in objects)
{
// Create 0 - 4 Random Items
for (int i = 0; i < Random.Next(0, 4); i++)
{
Item item = new Item();
item.Id = Guid.NewGuid();
item.Object = objectRecord.Id;
item.Created = DateTime.Now;
item.Changed = DateTime.Now;
dataContext.InsertOnSubmit(item);
}
}
dataContext.SubmitChanges();
}
amountToSkip += 250;
objects = objectCollection.Skip(amountToSkip).Take(250).ToList();
}
Ahora el problema surge al crear los elementos. Cuando se ejecuta la aplicación (y ni siquiera usando dataContext), la memoria aumenta constantemente. Es como si los artículos nunca fueran eliminados. ¿Alguien se da cuenta de lo que estoy haciendo mal?
¡Gracias de antemano!
¿Cómo inicializas tu objectCollection? –
IQueryable
¿Por qué toma lotes de 250 en lugar de simplemente iterar sobre objectCollection? – Jens