Es PLinq inherentemente más rápido que System.Threading.Tasks.Parallel.ForEach

Resume: Cambié de la estructura System.Threading.Tasks.Parallel.ForEach and Concurrent Data a una consulta simple plinq (Parallel Linq). La velocidad fueasombros.

¿Entonces plinq es inherentemente más rápido que Parallel.ForEach? O es específico de la tarea.

// Original Code
// concurrent dictionary to store results
var resultDict = new ConcurrentDictionary<string, MyResultType>();

Parallel.ForEach(items, item =>
        {
            resultDict.TryAdd(item.Name, PerformWork(source));
        });


// new code

var results =
            items
            .AsParallel()
            .Select(item => new { item.Name, queryResult = PerformWork(item) })
            .ToDictionary(kv => kv.SourceName, kv => kv.queryResult);

Notas: Cada tarea (PerformWork) ahora se ejecuta entre 0 y 200 ms. Solía tomar más tiempo antes de que lo optimizara. Es por eso que estaba usando la biblioteca Tasks.Parallel en el primer lugar. Así que pasé de 2 segundos de tiempo total a ~ 100-200 ms de tiempo total, realizando aproximadamente el mismo trabajo, solo con diferentes métodos. (¡Guau, linq y plinq son increíbles!)

Preguntas:

Se acelera debido al uso de plinq vs Parallel.ForEach? ¿Es simplemente la eliminación de la estructura de datos concurrentes (ConcurrentDictionary)? (Porque no necesita sincronizar hilos).Basado en la respuesta de esta pregunta relacionada

Mientras que PLINQ se basa en gran medida en un estilo funcional de programación sin efectos secundarios, los efectos secundarios son precisamente para lo que sirve el TPL. Si realmente quiere trabajar en paralelo en lugar de solo buscar / seleccionar cosas en paralelo, use el TPL.

¿Puedo suponer que debido a que mi patrón es básicamente funcional (dar entradas produce nuevas salidas sin mutación), plinq es la tecnología correcta para usar?

Estoy buscando la validación de que mis suposiciones son correctas, o una indicación de que me falta algo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta