问题标签 [parallel.foreach]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4871 浏览

c# - Parallel.ForEach 如何知道在哪个项目?- 哪个循环?

例子

现在这工作得很好。我想知道的是:我如何知道我目前处于哪个迭代中。我的意思是说我的列表有 100000 个 URL。它开始获取它们。但我也想在屏幕上打印目前正在获取的 URL。

我怎样才能做到这一点?如何判断当前循环在给定列表的哪一项?

0 投票
1 回答
579 浏览

c# - 后台 Worker 和 Parallel.For Null 异常

我正在尝试优化像素值读取器(来自图像)并尝试将 Parallel.For 与 Background Worker 一起使用以在条形图上显示进度。我使用字典来存储要用于其他处理的读取值。当我只使用 Parallel.For 时,它可以完美运行,而且时间不到一分钟。当我使用 Background Worker 和 Parallel.For 时,我在尝试将值添加到字典时收到空异常消息。

我正在使用 C# .Net 4。

0 投票
1 回答
191 浏览

c# - 如果条件满足,ParallelFor 不会立即取消所有线程

代码总是等到当前正在运行的任务完成后再OperationCancelledException抛出。

我希望程序在条件为真时立即停止。

cts.Cancel()我发现在 catch 中设置断点可以显示正在发生的事情。

也看过state.Stop

这是其他代码的简化版本。

Parallel.For如果我们想立即突破,也许对于在方法中运行很长时间的事情并不理想。

更新 2: 代码现在按预期工作并给出了一个很好的总数

0 投票
3 回答
1380 浏览

.net-4.0 - 在并行调用中,限制每秒执行次数

使用 TPL / Parallel.ForEach 有一种开箱即用的方法来限制每单位时间调用方法的次数(即每秒不超过 50 次调用)。这与限制线程数不同。也许有一些简单的技巧可以使这项工作?

0 投票
1 回答
1255 浏览

c# - 使用 Parallel.ForEach 循环的 HtmlAgilityPack 中的“System.Net.WebException”

我有一个网络抓取工具,可以处理大约 2,000 个页面,我试图通过使用 Parallel.ForEach 循环来加速这些页面。我当前的代码(为简洁起见)是:

当它使用常规foreach循环时,它起作用了。现在,它将处理一些行,然后在尝试检索时开始出现以下异常HTMLDocument

System.dll 中出现“System.Net.WebException”类型的第一次机会异常

HtmlAgilityPack.dll 中出现了“System.Net.WebException”类型的第一次机会异常

操作已超时

是什么导致在并行循环中操作时发生超时?它将通过前 150-300 行,然后将超时每个后续行。

0 投票
1 回答
70 浏览

.net - 并行类和 CPU

我有一个获胜的应用程序。它使用 .Net Parallel Class 对服务发起一百万次调用。当我的应用程序和服务在同一台服务器(8cpu,iis 7.5)中时,进程非常快,我在 IIS(工作进程列表)中看到 30-40 个线程和大量活动请求。但是,当应用程序和服务位于不同的服务器(4cpu 和 8cpu)中时,进程变慢,我只看到列出的工作进程。我还在性能计数器监视器中看到两个活动请求。

不是通讯问题,好像是cpu问题。如何在不将我的应用程序与服务放在一起的情况下获得相同的时间?

0 投票
1 回答
1055 浏览

c# - Parallel.ForEach 与 MatchCollection

首先,我知道这是这个问题的重复,但我无法让那里列出的解决方案对我有用。我知道 MatchCollection 没有实现 IEnumerable Parallel.ForEach 使用,因此需要 OfType() ......知道我做错了什么吗?这是我的设置:

这是我得到的编译错误:

0 投票
0 回答
670 浏览

c# - 在 C# Parallel.For 中使用局部变量

我是使用 Parallel.For 的新手,并且坚持以下内容。

在我的 For 循环中,我使用了一个指针偏移量(iPathMatrixOffset),每次迭代我都需要将它增加一个固定的数字(nStages)。基本上在 r 次迭代之后,偏移量的值将是 r * nStages。

我目前在循环内声明这个变量并将其设置为 r*nStages。

我认为这不是最有效的方法 - 这是性能关键代码(这就是我在这里使用基于指针的代码的原因) - 我想尝试看看在每次迭代结束时使用 nStages 递增它是否更快。

但我不知道如何声明一个仅对线程本地的变量,我无法从 MSDN 中弄清楚。

这一定是一个常见的问题......我当然忽略了一些明显的事情。

帮助表示赞赏。

当前代码:

想做类似的事情:

0 投票
2 回答
114 浏览

.net - Is this safe for Parallel.ForEach?

I have a service that pulls emails for parsing. Each email is parsed by multiple visitors (all implementing a simple IEmailVisitor interface with one method: void Visit(VisitableEmail email). For some background context, visitor implementations include a SubjectVisitor, BodyVisitor, SummaryVisitor and so on.

The service has an IList<IEmailVisitor> which gets created once on startup, and then reused in a timer event in this manner:

The Email class has this method: public void Accept(IEmailVisitor visitor) { visitor.Visit(this);} As each visitor is visited, properties are set (or changed) on the email instance itself.

There can be quite a few emails to process. My question is, Would I be safe converting the above code to:

None of my visitors maintain state between invocations of Visit(this). I'm sure this question reflects my fairly superficial knowledge of task parallelism, but despite the reading I've been doing, I am unsure if this would be a safe approach (assuming there are enough emails each time to justify the operation).

0 投票
2 回答
3421 浏览

c# - 为什么覆盖 Parallel.foreach 循环的 .NET 单元测试依赖于硬件?

我正在使用 Moq 对一些包含Parallel.foreach循环的代码进行单元测试。

Arrange阶段设置了 4 个要在循环中抛出的异常,然后包装在AggregateException.

这通过了我的 i7 处理器,我签入了代码。

之后,一位同事抱怨这对他来说并没有通过。结果Parallel.foreach在轰炸之前只在他的 Core2duo 上产生了 2 个线程,因此只有 2 个异常被包裹在AggregateException.

问题是如何处理这个单元测试不依赖于处理器架构?几个想法:-

  1. 有一篇关于手动添加异常的Microsoft 文章AggregateException,但我们并不热衷于这样做,因为如果出现问题,循环应该尽早退出。
  2. ParallelOptions.MaxDegreeOfParallelism可以对使用的线程数设置一个上限。但是除非这被拒绝为 1(这似乎更像是作弊而不是正确的单元测试)单元测试如何知道实际将使用多少线程并因此正确设置ArrangeAssert阶段?