Como carrego o paralelismo de equilíbrio em tarefas em que algumas tarefas são muito caras?

Eu tenho uma lista de objetos que precisam ser processados. Digamos que a lista seja uma lista de todos os clientes e preciso executar um cálculo intensivo da CPU em todos eles. Embora antes e depois desse cálculo eu precise buscar e confirmar dados novamente em um banco de dados, portanto não é uma tarefa puramente CPU.

então o que eu faço é

Parallel.ForEach(list, action);

Onde a ação é literalmente

1 Fetch customer data
2 Process calculate (time and memory intensive task)
3 Commit back customer data

O código costumava funcionar bem, mas ultimamente, às vezes, quandomúltiplo clientes com muitoalto número de registros são processados, o sistema fica sem memória.

Então, existe uma maneira de equilibrar isso? A maioria dos clientes é processada rapidamente, mas são poucos os que retiram todos os recursos. Posso evitar que alguns deles corram juntos?

Uma maneira de implementar isso é classificando a lista com base no tamanho e, em seguida, tente escolher o primeiro e o último item e controlar o paralelismo, mas desejando ver quais opções tenho aqui.

questionAnswers(1)

yourAnswerToTheQuestion