Parallel.ForEach应该用于数据库调用吗?

时间:2011-01-31 19:40:37

标签: parallel-processing task-parallel-library

我有一个Foo ID列表。我需要为每个ID调用一个存储过程。

e.g。

Guid[] siteIds = ...; // typically contains 100 to 300 elements
foreach (var id in siteIds)
{
   db.MySproc(id); // Executes some stored procedure.
}

每次调用都非常独立于其他行,这在数据库中不应该引起争议。

我的问题:使用Parallel.ForEach 对它进行并行化是否有益?或者数据库IO是否会成为瓶颈,更多线程会导致更多争用?

我自己会测量它,但是,在我的测试环境中测量它很困难,因为数据和负载比我们真实的Web服务器小得多。

2 个答案:

答案 0 :(得分:2)

出于好奇,你为什么要用 Parallel.ForEach 来优化它,并为每个项目生成线程/打开连接/传递数据/获取响应而不是写一个简单的“sproc”,它将使用ID列表而不是单个ID?

从第一眼看,它应该会给你带来更多明显的改善。

答案 1 :(得分:1)

我认为Parallel.ForEach会起作用,假设你的数据库服务器可以处理~150-300个并发操作。

唯一可以确定的方法是测量两者。