如何:在 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 调用方法。

请参阅