Parallel processing 在DB调用中应该使用Parallel.ForEach吗?

Parallel processing 在DB调用中应该使用Parallel.ForEach吗?,parallel-processing,task-parallel-library,Parallel Processing,Task Parallel Library,我有一个Foo id的列表。我需要为每个ID调用一个存储过程 e、 g 每个调用都非常独立于其他行,这在数据库中不应该引起争议 我的问题:使用Parallel.ForEach将其并行化是否有益?或者数据库IO将成为瓶颈,更多的线程只会导致更多的争用 我会自己测量,但是,在我的测试环境中很难测量,因为数据和负载比我们真正的web服务器小得多。我认为Parallel.ForEach可以工作,假设您的DB服务器可以处理~150-300个并发操作 唯一确定的方法是测量两者。出于好奇,为什么要使用Para

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

e、 g

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

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


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

我认为Parallel.ForEach可以工作,假设您的DB服务器可以处理~150-300个并发操作


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

出于好奇,为什么要使用Parallel.ForEach和spawn threads/open connections/pass data/get response for来选择它,而不是编写一个简单的“存储过程”来处理ID列表而不是单个ID


从第一眼看,这应该会让你有更显著的进步。

我建议你衡量两种方法的性能,并选择更快的方法。回答:这很复杂。我在用一个旧的系统,我的手有点像领带。此外,它并不像看上去那么清晰;我实际上是在调用一个.NET方法,它做了一些废话,然后再做一些废话,然后调用一个存储过程。从这个旧系统中删除它是危险的。我相信SQL可以处理很多并发任务,考虑到连接池和所有这些,但我不确定的是,由此产生的IO争用是否会被取消。
Guid[] siteIds = ...; // typically contains 100 to 300 elements
foreach (var id in siteIds)
{
   db.MySproc(id); // Executes some stored procedure.
}