Аааа, старая добрая InsertOnSubmit
утечка памяти. Я сталкивался с этим и много раз ударился головой о стену, пытаясь загрузить данные из больших файлов CVS, используя LINQ to SQL. Проблема в том, что даже после вызова SubmitChanges
, DataContext
продолжает отслеживать все объекты, которые были добавлены с использованием InsertOnSubmit
. Решением является SubmitChanges
после определенного количества объектов, затем создайте новый DataContext
для следующего пакета. Когда старый DataContext
будет собирать мусор, то же самое можно сказать и о всех вставленных объектах, которые отслеживаются им (и которые вам больше не нужны).
"Но подожди!" Вы говорите: «Создание и утилизация многих DataContext будет иметь огромные накладные расходы!». Ну, нет, если вы создадите одно соединение с базой данных и передадите его каждому конструктору DataContext
. Таким образом, поддерживается единственное соединение с базой данных, и в противном случае объект DataContext
представляет собой легкий объект, который представляет собой небольшой рабочий блок и должен быть отброшен после его завершения (в вашем примере, отправив определенное количество записей) .