Я обрабатываю 1 миллион записей в своем приложении, которые я извлекаю из базы данных MySQL. Для этого я использую Linq для получения записей и использования .Skip() и .Take() для обработки 250 записей за раз. Для каждой полученной записи мне нужно создать от 0 до 4 элементов, которые я затем добавляю в базу данных. Таким образом, среднее количество общих элементов, которые должны быть созданы, составляет около 2 миллионов.
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();
}
Теперь возникает проблема при создании элементов. При запуске приложения (и даже без использования dataContext) память постоянно увеличивается. Это похоже на то, что предметы никогда не попадают. Кто-нибудь замечает, что я делаю неправильно?
Спасибо заранее!