我有一个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服务器小得多。
答案 0 :(得分:2)
出于好奇,你为什么要用 Parallel.ForEach 来优化它,并为每个项目生成线程/打开连接/传递数据/获取响应而不是写一个简单的“sproc”,它将使用ID列表而不是单个ID?
从第一眼看,它应该会给你带来更多明显的改善。
答案 1 :(得分:1)
我认为Parallel.ForEach会起作用,假设你的数据库服务器可以处理~150-300个并发操作。
唯一可以确定的方法是测量两者。