问题标签 [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.
c# - Parallel.ForEach 如何知道在哪个项目?- 哪个循环?
例子
现在这工作得很好。我想知道的是:我如何知道我目前处于哪个迭代中。我的意思是说我的列表有 100000 个 URL。它开始获取它们。但我也想在屏幕上打印目前正在获取的 URL。
我怎样才能做到这一点?如何判断当前循环在给定列表的哪一项?
c# - 后台 Worker 和 Parallel.For Null 异常
我正在尝试优化像素值读取器(来自图像)并尝试将 Parallel.For 与 Background Worker 一起使用以在条形图上显示进度。我使用字典来存储要用于其他处理的读取值。当我只使用 Parallel.For 时,它可以完美运行,而且时间不到一分钟。当我使用 Background Worker 和 Parallel.For 时,我在尝试将值添加到字典时收到空异常消息。
我正在使用 C# .Net 4。
c# - 如果条件满足,ParallelFor 不会立即取消所有线程
代码总是等到当前正在运行的任务完成后再OperationCancelledException
抛出。
我希望程序在条件为真时立即停止。
cts.Cancel()
我发现在 catch 中设置断点可以显示正在发生的事情。
也看过state.Stop
。
这是其他代码的简化版本。
Parallel.For
如果我们想立即突破,也许对于在方法中运行很长时间的事情并不理想。
更新 2: 代码现在按预期工作并给出了一个很好的总数
.net-4.0 - 在并行调用中,限制每秒执行次数
使用 TPL / Parallel.ForEach 有一种开箱即用的方法来限制每单位时间调用方法的次数(即每秒不超过 50 次调用)。这与限制线程数不同。也许有一些简单的技巧可以使这项工作?
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 行,然后将超时每个后续行。
.net - 并行类和 CPU
我有一个获胜的应用程序。它使用 .Net Parallel Class 对服务发起一百万次调用。当我的应用程序和服务在同一台服务器(8cpu,iis 7.5)中时,进程非常快,我在 IIS(工作进程列表)中看到 30-40 个线程和大量活动请求。但是,当应用程序和服务位于不同的服务器(4cpu 和 8cpu)中时,进程变慢,我只看到列出的工作进程。我还在性能计数器监视器中看到两个活动请求。
不是通讯问题,好像是cpu问题。如何在不将我的应用程序与服务放在一起的情况下获得相同的时间?
c# - Parallel.ForEach 与 MatchCollection
首先,我知道这是这个问题的重复,但我无法让那里列出的解决方案对我有用。我知道 MatchCollection 没有实现 IEnumerable Parallel.ForEach 使用,因此需要 OfType() ......知道我做错了什么吗?这是我的设置:
这是我得到的编译错误:
c# - 在 C# Parallel.For 中使用局部变量
我是使用 Parallel.For 的新手,并且坚持以下内容。
在我的 For 循环中,我使用了一个指针偏移量(iPathMatrixOffset),每次迭代我都需要将它增加一个固定的数字(nStages)。基本上在 r 次迭代之后,偏移量的值将是 r * nStages。
我目前在循环内声明这个变量并将其设置为 r*nStages。
我认为这不是最有效的方法 - 这是性能关键代码(这就是我在这里使用基于指针的代码的原因) - 我想尝试看看在每次迭代结束时使用 nStages 递增它是否更快。
但我不知道如何声明一个仅对线程本地的变量,我无法从 MSDN 中弄清楚。
这一定是一个常见的问题......我当然忽略了一些明显的事情。
帮助表示赞赏。
当前代码:
想做类似的事情:
.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).
c# - 为什么覆盖 Parallel.foreach 循环的 .NET 单元测试依赖于硬件?
我正在使用 Moq 对一些包含Parallel.foreach
循环的代码进行单元测试。
Arrange阶段设置了 4 个要在循环中抛出的异常,然后包装在AggregateException
.
这通过了我的 i7 处理器,我签入了代码。
之后,一位同事抱怨这对他来说并没有通过。结果Parallel.foreach
在轰炸之前只在他的 Core2duo 上产生了 2 个线程,因此只有 2 个异常被包裹在AggregateException
.
问题是如何处理这个单元测试不依赖于处理器架构?几个想法:-
- 有一篇关于手动添加异常的Microsoft 文章
AggregateException
,但我们并不热衷于这样做,因为如果出现问题,循环应该尽早退出。 ParallelOptions.MaxDegreeOfParallelism
可以对使用的线程数设置一个上限。但是除非这被拒绝为 1(这似乎更像是作弊而不是正确的单元测试)单元测试如何知道实际将使用多少线程并因此正确设置Arrange和Assert阶段?