Я запускаю импорт, который будет иметь 1000 записей при каждом запуске. Просто ищем подтверждение моих предположений:
Какой из них имеет наибольший смысл:
- Запустите
SaveChanges()
каждый вызовAddToClassName()
. - Запустите
SaveChanges()
каждое n число вызововAddToClassName()
. - Запустите
SaveChanges()
после всех вызововAddToClassName()
.
Первый вариант, вероятно, медленный? Поскольку он должен будет анализировать объекты EF в памяти, генерировать SQL и т.д.
Я предполагаю, что второй вариант является лучшим из обоих миров, так как мы можем обернуть попытку поймать этот вызов SaveChanges()
и просто потерять n количество записей за раз, если один из них не работает. Может быть, хранить каждую партию в списке < > . Если вызов SaveChanges()
завершен, избавьтесь от списка. Если это не удается, зарегистрируйте элементы.
Последний вариант, вероятно, тоже будет очень медленным, так как каждый отдельный объект EF должен быть в памяти до тех пор, пока не будет вызван SaveChanges()
. И если сохранение не удалось, то ничего не было бы сделано, верно?