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

更新:2010 年 5 月

本示例演示如何强制 PLINQ 绕过其默认试探法并在不考虑查询形状的情况下并行化查询。

警告说明警告

本示例旨在演示用法,运行速度可能不如等效的顺序 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>

概念

并行 LINQ (PLINQ)

修订记录

日期

修订记录

原因

2010 年 5 月

添加了有关用法与 加速的注释。

客户反馈