方法: PLINQ の実行モードを指定するHow to: Specify the Execution Mode in PLINQ

この例では、PLINQ に既定のヒューリスティックをバイパスさせ、クエリのシェイプに関係なくクエリを並列化する方法を示します。This example shows how to force PLINQ to bypass its default heuristics and parallelize a query regardless of the query's shape.

警告

この例は、使用方法を示すことを意図したものであるため、同等の順次的な LINQ to Objects クエリほど高速ではない可能性があります。This example is intended to demonstrate usage, and might not run faster than the equivalent sequential LINQ to Objects query. 高速化の詳細については、「PLINQ での高速化について」を参照してください。For more information about speedup, see Understanding Speedup in PLINQ.

Example

// 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 is designed to exploit opportunities for parallelization. ただし、すべてのクエリが並列実行の利点を活用できるわけではありません。However, not all queries benefit from parallel execution. たとえば、負荷が非常に小さい単一のユーザー デリゲートを含むクエリの場合、順次実行の方が速度が速くなります。For example, when a query contains a single user delegate that does very little work, the query will usually run faster sequentially. これは、実行を並列するために必要なオーバーヘッドが、並列化で高速にする場合の負荷より大きいためです。This is because the overhead involved in enabling parallelizing execution is more expensive than the speedup that is obtained. このため、PLINQ はすべてのクエリを自動的に並列化するわけではありません。Therefore, PLINQ does not automatically parallelize every query. 最初に、クエリのシェイプとクエリを構成しているさまざまな演算子を調べます。It first examines the shape of the query and the various operators that comprise it. この分析に基づいて、既定の実行モードの PLINQ によって、クエリの一部またはすべてを順次実行するかどうかが決定されます。Based on this analysis, PLINQ in the default execution mode may decide to execute some or all of the query sequentially. ただし、PLINQ が分析から判断するよりも、ユーザーの方がクエリをより詳しく理解している場合があります。However, in some cases you may know more about your query than PLINQ is able to determine from its analysis. たとえば、デリゲートの負荷が非常に大きいため、クエリで並列化を使用する方がよいとわかっているとします。For example, you may know that a delegate is very expensive, and that the query will definitely benefit from parallelization. このような場合は、WithExecutionMode メソッドを使用し、ForceParallelism 値を指定することで、クエリを常に並列実行するよう PLINQ に指示できます。In such cases, you can use the WithExecutionMode method and specify the ForceParallelism value to instruct PLINQ to always run the query as parallel.

コードのコンパイルCompiling the Code

このコードをコピーして PLINQ Data Sample に貼り付けて、Main からメソッドを呼び出します。Cut and paste this code into the PLINQ Data Sample and call the method from Main.

関連項目See also