Можно ли использовать plinq ForAll для массовой вставки в базу данных? - PullRequest
5 голосов
/ 20 июля 2010

Я делаю так:

 entities.AsParallel().ForAll(o => repository.Insert(o));

это хорошо, у меня будет больше производительности с этим?

Ответы [ 2 ]

4 голосов
/ 20 июля 2010

Наверное, нет.Каждая вставка фактически выполняется в отдельном потоке, в то время как массовая вставка работает хорошо, передавая большие объемы данных из одного потока за один раз.

PS: SqlBulkCopy будет работать намного лучше, чем параллельнаявставить.Используйте это, если это возможно.

4 голосов
/ 20 июля 2010

Нет.

Этот способ может быть быстрее, поскольку он использует паралеллизм в SQL, но в конце SQL должен сделать блокировку для таблицы (страницы), поскольку он выполняет вставку.поэтому каждый запрос paralell выполняется снова за другим.

Если вы хотите выполнить массовую вставку, то сделайте SP, принимающий все записи (например, таблицу с SQL 2008.), или сделайте это с Linq2SQL.

это было бы правильное дизайнерское решение.

...