方法: 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 からメソッドを呼び出します。

関連項目