When using PLinq
Memory Allocations can be the bottleneck.
Anonomous types/reference types are allocated on the heap and will have to be garbage collected.
The garbage collector was designed with low latency/fast UI thread design considerations.
Try to use value types.
Or in the app.config add
This enables server mode garbage collection.
Typically workstation mode gc is the fastest, but when we deal with parellism and garbage collection across multiple processors server garbage collection can reap significant performance improvements.