¿Cómo cargo el paralelismo de equilibrio de carga en tareas en las que algunas tareas son muy costosas?

Tengo una lista de objetos que necesita procesarse. Digamos que la lista es una lista de todos los clientes y necesito realizar un cálculo intensivo de la CPU en todos ellos. Aunque antes y después de este cálculo necesito recuperar y confirmar los datos en una base de datos, por lo que no es puramente una tarea de CPU.

entonces lo que hago es

Parallel.ForEach(list, action);

Donde la acción es literalmente

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

El código solía funcionar bien, pero últimamente a veces cuandomúltiple clientes con muyalto número de registros Cuando se procesan, el sistema se queda sin memoria.

Entonces, ¿hay alguna manera de equilibrar la carga de esto? La mayoría de los clientes se procesan rápidamente, pero son pocos los que eliminan todos los recursos. ¿Puedo evitar que algunos de ellos corran juntos?

Una forma de implementar esto es ordenar la lista según el tamaño y luego intentar seleccionar el primer y el último elemento y controlar el paralelismo yo mismo, pero queriendo ver qué opciones tengo aquí.

Respuestas a la pregunta(1)

Su respuesta a la pregunta