.net使用PLinq並行查詢提升查詢效率,List.AsParallel(),ForAll()替換Foreach

參考:https://docs.microsoft.com/zh-cn/dotnet/standard/parallel-programming/introduction-to-plinq

var source = Enumerable.Range(1, 10000);
            // Opt in to PLINQ with AsParallel.
            //執行模式 WithExecutionMode 如果你通過測試和測量知道特定查詢以並行方式執行得更快時,可以強制指定並行查詢。
            //並行度 WithDegreeOfParallelism 默認情況下,PLINQ 使用主機計算機上的所有處理器。
            var evenNums = from num in source.AsParallel()
                           .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                           .WithDegreeOfParallelism(2)
                           where num % 2 == 0
                           select num;
            Console.WriteLine("{0} even numbers out of {1} total", evenNums.Count(), source.Count());

evenNums.ForAll(x=> Console.WriteLine(x));//並行結果,不合並,直接循環輸出各個結果
evenNums.ToList().ForEach(x => Console.WriteLine(x));//將並行得到的結果合併成一個,然後循環輸出
執行模式:默認情況下,PLINQ 是保守的。 在運行時,PLINQ 基礎結構將分析查詢的總體結構。 如果通過並行可能會提高查詢速度,PLINQ 則將源序列分區爲可以同時運行的任務。 如果並行化查詢不安全,PLINQ 則只會按順序運行查詢。 如果 PLINQ 可以在可能會較昂貴的並行算法或成本較低的順序算法之間進行選擇,它會默認選擇順序算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章