У меня есть консольное приложение c #, которое загружает большой объем данных из файла csv, анализирует его, а затем создает или обновляет записи. Файл содержит тысячи записей, которые создают большие данные .net. ADO.net используется для создания или обновления записи с использованием DbContext.
Использование цикла foreach объектов с данными для создания / обновления приводит к тому, что использование ОЗУ проходит через крышу, и в конечном итоге выдается исключение превышения памяти.
Если я помещаю контекст БД в использование внутри цикла foreach, память управляется GC, и программа запускается без проблем, но я обеспокоен тем, что не всегда целесообразно продолжать создавать новое соединение БД ,
Утечки памяти
using (myEntities db = new myEntities())
{
db.Database.Connection.ConnectionString = __ConnString;
foreach (DataRow item in _DataTable.Rows)
{
//create / update records
}
}
не пропускает память
foreach (DataRow item in _DataTable.Rows)
{
using (myEntities db = new myEntities())
{
db.Database.Connection.ConnectionString = __ConnString;
//create / update records
}
}
Есть ли обратная сторона наличия db-соединения внутри использования внутри цикла foreach с повторяющимся воссозданием?