В последнее время я тоже с этим сталкивался. Вызов SubmitChanges
3000 раз не будет хорошей идеей, но тогда, в зависимости от того, насколько важно, чтобы каждая запись была вставлена, вы можете сделать это, в конце концов, это займет всего 1000 мс.
Объем транзакции и кратный SubmitChanges
- это то, что я ожидал увидеть. Поскольку вы все еще в пределах одной транзакции, я ожидал бы, что SQL-сервер справится с этим лучше, что кажется. Один SubmitChanges
и использование явного / неявного TransactionScope
, похоже, дают тот же результат, что и следовало ожидать. Там не должно быть никакой разницы в производительности.
Я думаю, что соединения создаются, когда это необходимо, но вы должны помнить, что это будет объединено с вашим провайдером, поэтому, если ваша строка соединения не меняется, вы должны подключиться к тому же пулу соединений, который даст тот же производительность независимо от подхода. Поскольку LINQ-SQL использует SqlConnection
за кулисами, некоторая информация об этом находится по следующему адресу:
http://msdn.microsoft.com/en-us/library/8xx3tyca(VS.80).aspx
Если ваша производительность после грубой силы, посмотрите на переход в Stored Proceedure для вставки с явным TransactionScope
. Если это не достаточно быстро, посмотрите на использование SqlBulkCopy
. 3000 строк должны вставляться быстрее, чем 1000 мс.