更新: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 调用该方法。
请参见
参考
概念
修订记录
日期 |
修订记录 |
原因 |
---|---|---|
2010 年 5 月 |
添加了有关用法与 加速的注释。 |
客户反馈 |