У меня есть репозиторий на уровне class
и вставка строк в некоторые таблицы с заполнением их полей, я делаю это в for-loop
котором есть 10K элементов. Так нет, где еще я называю SaveChanges()
. Я думал просто вызвать SaveChanges()
один раз в конце for-loop
и сохранить их все сразу. Но похоже, что в середине моей программы он работает из памяти и падает. У меня 16 ГБ оперативной памяти, а монитор ресурсов - 42%. Так что, если я вызову SaveChanges()
в конце каждого элемента цикла, а не в конце всего цикла, уменьшит ли размер его и поможет ли эта проблема в памяти?
Нет, это не спасло бы память. Я предлагаю после каждой итерации вызвать SaveChanges()
, установить объект в null и создать новый для следующей итерации так:
foreach(kitten)
{
myRepo = new Repo();
//....creating records
myRepo.SaveChanges()
myRepo = null;
}
1) НЕ вызывать SaveChanges() в конце каждой итерации, она слишком медленная
2) Проверьте это
Когда я должен вызвать SaveChanges() при создании 1000 объектов Entity Framework? (например, во время импорта)
Если вы можете использовать SqlBulkCopy, это очень быстро
Также проверьте, настроено ли ваше приложение на x86, если вы не можете получить доступ к более чем 2 ГБ (на самом деле это меньше)