方法: PLINQ の実行モードを指定する

更新 : 2010 年 5 月

この例では、PLINQ に既定のヒューリスティックをバイパスさせ、クエリの形態に関係なくクエリを並列化する方法を示します。

Caution メモ注意

この例は使用法を示すことを目的としており、同等の LINQ to Objects 順次クエリよりも実行速度が遅い場合があります。高速化の詳細については、「PLINQ での高速化について」を参照してください。

使用例

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
// 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();
}

PLINQ は、並列化を利用しやすくするために設計されています。 ただし、すべてのクエリが並列実行の利点を活用できるわけではありません。 たとえば、負荷が非常に小さい単一のユーザー デリゲートを含むクエリの場合、順次実行の方が速度が速くなります。 これは、並列化して実行できるようにすることで発生するオーバーヘッドが、並列化で高速にする場合の負荷より大きいためです。 このため、PLINQ はすべてのクエリを自動的に並列化しません。 最初に、クエリの形態とクエリを構成しているさまざまな演算子を調べます。 この分析に基づいて、既定の実行モードの PLINQ によって、クエリの一部またはすべてを順次実行するかどうかが決定されます。 ただし、PLINQ が分析から判断するよりも、ユーザーの方がクエリをより詳しく理解している場合があります。 たとえば、デリゲートの負荷が非常に大きいため、クエリで並列化を使用する方が良いとわかっているとします。 このような場合は、WithExecutionMode<TSource> メソッドを使用し、ForceParallelism 値を指定することで、クエリを常に並列実行するよう PLINQ に指示できます。

コードのコンパイル

このコードをコピーして PLINQ データのサンプル に貼り付けて、Main からメソッドを呼び出します。

参照

参照

AsSequential<TSource>

概念

Parallel LINQ (PLINQ)

履歴の変更

日付

履歴

理由

2010 年 5 月

使用法と高速化に関する説明を 追加。

カスタマー フィードバック