db InsertOnSubmit - как очистить коллекцию - PullRequest
2 голосов
/ 26 августа 2011

Я выполняю масштабный импорт, и только .SubmitChanges () выполняю только 1000 записей.

Пример:

var targetRecord = new Data.User() { FirstName = sourceRecord.FirstName };
db.Users.InsertOnSubmit(record);

Выше приведено в цикле для каждой записииз исходной базы данных.Затем, позже ...

if (i % 1000 == 0) { db.SubmitChanges(); }

Проблема в том, что коллекция элементов для вставки становится все больше и больше, когда я хочу очищать их после каждого SubmitChanges ();

Что я ищу:

if (i % 1000 == 0) { db.SubmitChanges(); db.Dispose_InsertOnSubmit_Records(); }

Что-то в этом роде.В качестве альтернативы я мог бы иметь список записей данных, хранящихся в локальной переменной, которую я постоянно восстанавливаю после отправки изменений, но это больше кода.

Надеюсь, это имеет смысл.Спасибо!

Ответы [ 2 ]

1 голос
/ 26 августа 2011

Вы можете инициализировать новый DataContext после каждого SubmitChanges. Я не уверен в влиянии на производительность, но в прошлом я делал что-то подобное без проблем.

Единственное другое решение, которое я видел, - это перебирать ваши изменения и возвращать их. Похоже, что первый будет гораздо более эффективным методом.

0 голосов
/ 27 августа 2011

Ну, я боюсь, что массивные и linq-to-sql не идут вместе. Он просто не предназначен для пакетной обработки.

Если то, что вы делаете, это просто прямой импорт (и ваш пример указывает на это), вам гораздо лучше использовать SqlBulkCopy. Это на порядок быстрее. Также больше кода, но если вы ищете скорость, лучшего решения нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...