PLINQ (Parallel LINQ) & Custom Partitioning
1Concept
`AsParallel()` partitions in-memory collections across multiple CPU cores using chunking or range partitioning to accelerate heavy CPU-bound calculations.
2Architecture Diagram
[ 1,000,000 Numbers ]
│ .AsParallel()
├── Partition 1 (Core 1) ──> Prime Factorization
├── Partition 2 (Core 2) ──> Prime Factorization
└── Partition 3 (Core 3) ──> Prime Factorization
│
▼ .ForAll() / Merged Results3Code Example
C# 13 & .NET 9
using System;
using System.Linq;
public class PlinqDemo
{
public static void Main()
{
int[] numbers = Enumerable.Range(1, 1000).ToArray();
// Multi-core parallel LINQ execution
var evenSquaresCount = numbers.AsParallel()
.WithDegreeOfParallelism(4)
.Where(x => x % 2 == 0)
.Select(x => x * x)
.Count();
Console.WriteLine($"Even Squares Count computed via PLINQ: {evenSquaresCount}");
}
}4Expected Output
Even Squares Count computed via PLINQ: 500
5Key Takeaways
- ✓Use PLINQ exclusively for CPU-bound computations (not I/O-bound tasks).
- ✓Use `.AsOrdered()` if sequence order must be preserved.
- ✓Use `Partitioner.Create()` to tune chunk sizes for uneven workloads.