是否可以使用plinq ForAll批量插入数据库?

时间:2010-07-20 13:22:21

标签: c# .net linq .net-4.0 plinq

我这样做:

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

这很好,我会有更多表现吗?

2 个答案:

答案 0 :(得分:4)

没有

这个可以更快,因为它利用了对SQL的并行性,但最终SQL必须对表(页面)进行锁定,因为它会进行插入。 因此,每个并列请求再次执行。

如果要进行批量插入,请使SP接受所有条目(例如,带有SQL 2008的表)。或者使用Linq2SQL进行。

这将是正确的设计解决方案。

答案 1 :(得分:4)

可能不是。每个插入实际上都是在一个单独的线程上进行的,而批量插入只需一次从单个线程传输大量数据就可以正常工作。

PS:SqlBulkCopy可以比并行插入更好,更好。如果可能,请使用它。