什麼是 PLINQ?
PLINQ (Parallel LINQ) 是 LINQ 的並行實現,僅需在數據源後添加 .AsParallel() 即可將查詢並行化,支持 XML 與內存集合(不支持遠程查詢如 LINQ to SQL)。
三種執行模式
1. 管道模式
- 一個線程讀取數據源,多線程並行處理
- 生產者-消費者同步執行
- 優點:內存佔用低
- 缺點:同步開銷大,負載均衡難調優
2. 停止-繼續模式
- 用於需一次性返回結果集的場景(
ToList()、OrderBy() 等)
- 各階段依次完成,統一返回結果
- 優點:無線程同步開銷,性能優於管道模式
3. 反向枚舉模式
- 通過
ForAll 將最終處理函數分發到各工作線程
- 無需收集所有結果到主線程
- 優點:性能最佳
- 要求:傳遞函數必須線程安全,避免
lock 等互斥操作
異常處理機制
- 任一線程拋出異常 → 所有線程終止
- 多異常合併為
AggregateException (舊版為 MultipleFailuresException)
- 保留每個異常的完整調用堆棧
適用場景建議
- CPU 密集型、數據獨立、集合較大 → 首選 PLINQ
- 簡單查詢或數據量小 → 普通 LINQ 開銷更低
- 涉及共享狀態寫入 → 需額外同步機制,謹慎使用