- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
在使用 Parallel.ForEach
时,我们可以选择定义并行选项并设置最大并行度,例如:
Parallel.ForEach(values, new ParallelOptions {MaxDegreeOfParallelism = number}, value = > {
// Do Work
})
但是在执行 PLINQ 时:
Tabel.AsEnumberable()
.AsParallel()
.Where(//Logic)
我找不到设置 MaxDegreeOfParallelism
的方法。我也在网上查了一下,但没有找到任何东西。有人找到解决方法吗?任何帮助表示赞赏。
最佳答案
您可以使用 ParallelEnumerable.WithDegreeOfParallelism
:
Sets the degree of parallelism to use in a query. Degree of parallelism is the maximum number of concurrently executing tasks that will be used to process the query.
var result = Tabel.AsEnumberable()
.AsParallel()
.WithDegreeOfParallelism(number)
.Where(/* predicate */);
编辑:
@svick 在 ParallelOptions.MaxDegreeOfParallelism vs PLINQ’s WithDegreeOfParallelism 上提供了出色的表现其中强调了两者之间的区别:
Parallel works using an under-the-covers concept we refer to as replicating tasks. The concept is that a loop will start with one task for processing the loop, but if more threads become available to assist in the processing, additional tasks will be created to run on those threads. This enables minimization of resource consumption. Given this, it would be inaccurate to state that ParallelOptions enables the specification of a DegreeOfParallelism, because it’s really a maximum degree: the loop starts with a degree of 1, and may work its way up to any maximum that’s specified as resources become available.
PLINQ is different. Some important Standard Query Operators in PLINQ require communication between the threads involved in the processing of the query, including some that rely on a Barrier to enable threads to operate in lock-step. The PLINQ design requires that a specific number of threads be actively involved for the query to make any progress. Thus when you specify a DegreeOfParallelism for PLINQ, you’re specifying the actual number of threads that will be involved, rather than just a maximum.
关于c# - AsParallel() 的最大并行度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25290389/
我想知道 C# 中 AsParallel 和 AsParallel.Select() 之间的区别是什么,因为两者都返回 AsParallelQuery 的实例。考虑以下代码片段: var list =
如何限制AsParallel()预先读取并放入其内部缓冲区的项目数量? 这是一个例子: int returnedCounter; IEnumerable Enum() { while (tru
我有一个 EmpId 列表。我需要为此列表中的每个 EmpId 执行一些操作。 void ProcessEmp(EmpId empId) { // process the emp } 我可以使用
我毫不怀疑,对于客户端应用程序,AsParallel() 会带来一些开箱即用的性能提升。但是如果我在网络环境中使用它呢?假设我有一个小部件框架,它循环遍历所有小部件以获取它们的数据并呈现输出。这会很好
Stephen Toub 的书第 33 页 http://www.microsoft.com/download/en/details.aspx?id=19222 有代码 var pings = fro
我有以下 PLINQ 查询: // Let's get a few customers List customers = CustomerRepository.GetSomeCustomers();
下面的测试程序好像不会做深蹲。这是因为我正在测试一个小列表吗? static void Main(string[] args) { List list = 0.UpTo(4); Tes
所以主题就是问题。 我得到 AsParallel 方法返回包装器 ParallelQuery使用相同的 LINQ 关键字,但来自 System.Linq.ParallelEnumerable而不是 S
我看过这段代码,它使用 AsParallel() 和 Any() 来检查条件: bool IsAnyDeviceConnected() { return m_devices.Any(d => d
谁能给我解释一件事。据我了解 AsParallel() 在自己的任务中执行。那么,如果查询返回大量数据,当'foreach'开始执行Console.WriteLine时,变量'd'可以为空吗? var
在使用 Parallel.ForEach 时,我们可以选择定义并行选项并设置最大并行度,例如: Parallel.ForEach(values, new ParallelOptions {MaxDeg
我想使用 PLINQ 方法 AsParallel() 重写这个 Parallel.For 循环。据我所知, AsParallel() 需要将整个序列传递给它,例如创建数组 A,然后调用 A.AsPar
我有一个 List收藏,每个Boss都有2到10个助理职员。我正在对包括老板在内的所有员工进行分组。现在我有 List ,由此我正在使用 Parallel LINQ 搜索 "Raj",我可以在哪里放置
这段代码有什么区别: int[] tab = new int[] { 1, 2, 3, 4, 5 }; List result1 = (from t in tab
当我使用 AsParallel() 时,下一个操作在多线程中运行,那么,我在此查询中使用的方法应该是线程安全的? 在下一个示例中,Convert(string value) 方法不是线程安全的,但在作
假设执行一个方法 CountString,给定一个字符串数组和一个 int,返回长度大于该 int 的字符串的数量。如果我必须尽可能利用多核硬件,这样做是否足够: public int CountSt
我正在构建一个必须处理一堆文档的控制台应用程序。 为了简单起见,过程是: 对于 X 和 Y 之间的每一年,查询数据库以获取流程的文档引用列表 对于每个引用,处理一个本地文件 我认为 process 方
我用 List.AsParallel().WithDegreeOfParallelism(3).ForAll(x => Worker(x)); 在列表的每个元素上应用 Worker。 我如何命名运行
我对使用 LINQ AsParallel() 的并发性有一些疑问。 假设我有以下代码: int counter = 0; someList.AsParallel().ForEach(item => {
感谢观看。我有以下返回语句: //Return the result set return new FilterDto.FilterResult
我是一名优秀的程序员,十分优秀!