/ / Parallel.ForEach deve ser usado em chamadas de banco de dados? - processamento paralelo, biblioteca de tarefas paralelas

Parallel.ForEach deve ser usado em chamadas DB? - processamento paralelo, biblioteca paralela de tarefas

Eu tenho uma lista de IDs Foo. Preciso chamar um procedimento armazenado para cada ID.

por exemplo.

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

Cada chamada é bastante independente das outras linhas, isso não deve ser contencioso no banco de dados.

Minha pergunta: seria benéfico paralelizar isso usando Parallel.ForEach? Ou a IO do banco de dados será um gargalo e mais threads resultariam em mais contenção?

Eu mesmo mediria, no entanto, é difícil medir isso no meu ambiente de teste, onde os dados e a carga são muito menores que o nosso servidor Web real.

Respostas:

2 para resposta № 1

Por curiosidade, por que você deseja otimizá-lo com Paralelo.ParaCada e gerar threads / abrir conexões / transmitir dados / obter resposta para todo item em vez de escrever um "sproc" simples que funcione com uma lista de IDs em vez de um único ID?

Desde o primeiro olhar, você deve obter melhorias muito mais visíveis.


1 para resposta № 2

Eu acho que o Parallel.ForEach funcionaria, supondo que seu servidor de banco de dados possa lidar com ~ 150-300 operações simultâneas.

A única maneira de saber com certeza é medir os dois.