如何:在 PLINQ 中指定執行模式

這個範例示範如何強制 PLINQ 略過其預設啟發學習法並以平行方式處理查詢,而不考慮查詢的種類。

注意

這個範例是為了示範用法,執行速度可能比不上對應的循序 LINQ to Objects 查詢。 如需加速的詳細資訊,請參閱認識 PLINQ 中的加速

範例

// Paste into PLINQDataSample class.
static void ForceParallel()
{
    var customers = GetCustomers();
    var parallelQuery = (from cust in customers.AsParallel()
                            .WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         where cust.City == "Berlin"
                         select cust.CustomerName)
                        .ToList();
}
Private Shared Sub ForceParallel()
    Dim customers = GetCustomers()
    Dim parallelQuery = (From cust In customers.AsParallel().WithExecutionMode(ParallelExecutionMode.ForceParallelism)
                         Where cust.City = "Berlin"
                         Select cust.CustomerName).ToList()
End Sub

PLINQ 的設計,是要利用可以平行處理的機會。 不過,並非所有查詢都適合平行執行。 舉例來說,如果查詢包含的單一使用者委派作用極小,循序執行查詢通常會更快。 循序執行更快,是因為啟用平行執行的額外負荷所耗用的資源高於增加的速度。 因此,PLINQ 不會自動平行處理每個查詢。 它會先檢查查詢的種類,和組成查詢的各個運算子。 根據這項分析,預設執行模式的 PLINQ 就能決定要循序執行部分或所有的查詢。 不過,在某些情況下,您所能得知的查詢資訊,不僅僅是 PLINQ 能夠從其分析中判斷的資訊。 舉例來說,委派相當耗費資源,而查詢必然會受益於平行處理。 在這種情況下,您可以使用 WithExecutionMode方法並指定 ForceParallelism 值,指示 PLINQ 永遠以平行方式執行查詢。

編譯程式碼

將此程式碼剪下並貼到 PLINQ 資料範例,並從 Main 呼叫此方法。

另請參閱