我真的不明白什么时候使用WithDegreeOfParallelism,以及它如何提高性能?
不确定在什么上下文中限制执行查询的最大任务数
搜索时的第二个链接提供PLINQ简介页面,其中提供了两个示例:
当您希望确保计算机上运行的其他进程接收到一定的CPU时间时,这很有用。
在查询执行大量非计算绑定工作(如文件I/O)的情况下,指定一个大于机器上核心数量的并行度可能是有益的。
如果这两种情况都不吸引你,或者与你使用PLINQ的方式不匹配,并且你想不出任何其他情况(例如,如果他们将竞争使用其他可用实例数量有限的资源),那么我建议将其排除在外。
您可以在并行循环中使用此方法。例如,我在DataGridView中的记录处理中使用了parallelizm。
int tasks = Environment.ProcessorCount;
DataGrid.Rows.AsParallel().OfType<DataGridViewRow>().WithDegreeOfParallelism(tasks).ForAll(i =>
{
// some code
});
默认情况下,DegreeOfParallelism等于处理器内核的数量。此参数定义在处理时将创建多少并发任务(即线程)。当我使用默认度(4核)时,我的应用程序"挂起"了一点,所以我决定将并行度降低到2。在任何情况下,您都应该根据需要选择此参数的值(或为用户提供强制选择的选项;))