问题标签 [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 投票
1 回答
483 浏览

.net - Parallel.ForEach 没有产生所有线程

我在使用 Parallel.ForEach 时遇到了一些问题。我需要模拟几个硬件组件,等待传入连接并回复它。

我目前的代码如下:

我遇到的问题是:并非每个组件都会创建自己的线程。即使其中一个线程退出,它们仍然不会产生。

我集合中的当前组件数量是 40,产生的线程数是(或至少看起来是)33。

我的印象是 Parallel.Foreach() 将为传递给它的可枚举集合创建一个新的并行线程。

任何想法我做错了什么?

0 投票
4 回答
14493 浏览

c# - Parallel.ForEach / 多线程的最佳使用

我需要从网站上抓取数据。我有超过 1,000 个需要访问的链接,以前我将每个线程划分为 10 个链接,并且将启动 100 个线程,每个线程拉出 10 个。在几个测试用例之后,100 个线程是最小化检索内容时间的最佳计数所有的链接。

我意识到 .NET 4.0 为开箱即用的多线程提供了更好的支持,但这是根据您拥有的内核数量来完成的,在我的情况下,这并没有产生足够的线程。我想我要问的是:优化 1,000 链接拉动的最佳方法是什么。我应该使用.ForEach并让Parallel扩展程序控制产生的线程数量,还是找到一种方法来告诉它启动和划分工作的线程数?

我以前没有合作过,Parallel所以也许我的方法可能是错误的。

0 投票
2 回答
198 浏览

c# - Parallel.For 错误

我试图在 Parallel.For 中削减 DateTime:

部分代码:

但我得到以下异常:

如果我在普通的 for 循环中运行它,我不会得到任何异常并且一切正常。任何想法如何解决这个问题?

0 投票
3 回答
5884 浏览

c# - 并行线程中的多个 dbcontexts,EntityException “当活动用户较少时重新运行您的语句”

Parallel.ForEach习惯在多个线程上工作,每次迭代都使用一个新的 EF5 DbContext,所有这些都包含在一个 TransactionScope 中,如下所示:

运行几分钟后,它会抛出一个 EntityException“底层提供程序在打开时失败”,其内部细节如下:

“SQL Server 数据库引擎的实例此时无法获取LOCK资源。当活动用户较少时重新运行您的语句。请数据库管理员检查此实例的锁和内存配置,或检查是否长时间运行交易。”

有谁知道是什么原因造成的或如何预防?谢谢。

0 投票
1 回答
7948 浏览

c# - ThreadPool.QueueUserWorkItem 和 Parallel.ForEach 的区别?

以下两种方法的主要区别是什么:

ThreadPool.QueueUserWorkItem

System.Threading.Tasks.Parallel ForEach

我是多线程的新手,想知道每种情况下会发生什么(就执行过程而言)每种方法的多线程级别是多少?帮助我可视化这两个过程。

SendFilesToClient:从数据库中获取数据,转换为 Excel 并将 Excel 文件发送到相应的客户端。

谢谢!

0 投票
11 回答
165180 浏览

c# - 带有异步 lambda 的并行 foreach

我想并行处理一个集合,但我在实现它时遇到了麻烦,因此我希望能得到一些帮助。

如果我想在并行循环的 lambda 中调用 C# 中标记为 async 的方法,就会出现问题。例如:

计数为 0 时会出现问题,因为创建的所有线程实际上只是后台线程,并且Parallel.ForEach调用不会等待完成。如果我删除 async 关键字,该方法如下所示:

它可以工作,但它完全禁用了等待的聪明,我必须做一些手动异常处理..(为简洁起见已删除)。

如何实现一个Parallel.ForEach循环,在 lambda 中使用 await 关键字?是否可以?

Parallel.ForEach 方法的原型采用Action<T>as 参数,但我希望它等待我的异步 lambda。

0 投票
0 回答
579 浏览

vb.net - parallel.foreach 将多个变量传递给函数

我有以下代码读取多个 CSV 文件,然后使用线程将数据传递给一个类。我必须将 CSV 路径和一个字符串传递给函数(两者都必须是动态的)。

我正在尝试学习 Parallel.ForEach 来做同样的事情。搜索互联网让我得到了这个(这不起作用):

有人有更好的主意吗?

0 投票
2 回答
1617 浏览

c# - 将数百万个项目从一个存储帐户转移到另一个

作为利用 Azure VM 支持的大规模迁移的一部分,我需要将大约 420 万张图像从美国中北部迁移到美国西部(对于那些不知道的人,美国中北部不支持他们)。图像都在一个容器中,分为大约 119,000 个目录。

我正在使用 Copy Blob API 中的以下内容:

问题是,它太慢了。哇哇太慢了。以发出命令复制所有这些东西的速度,它将需要大约四天的时间。我不太确定瓶颈是什么(连接限制客户端、Azure 端的速率限制、多线程等)。

所以,我想知道我的选择是什么。有什么办法可以加快速度,还是我只是坚持需要四天才能完成的工作?

编辑:我如何分发工作以复制所有内容

0 投票
2 回答
6955 浏览

c# - 并行循环内的局部变量线程安全

cnt在 nested 中有一个变量 () parallel.foreach。我运行这个程序,显然它运行良好。有人知道这段代码真的是线程安全的吗?parallel是否可以在循环内定义变量?

谢谢你。

0 投票
1 回答
411 浏览

c# - 控制台应用程序比 asp.net 应用程序慢

我有一个爬虫机器人,它使用parallel.for 和parallel.foreach 并行下载各种页面。MaxDegreeOfParallelism 设置为 20 左右,因为增加它似乎不会进一步提高性能,我不想让任何 Web 服务器过载。

当我从 ASP.NET 网站(所有地方)开始爬网时,它以可接受的性能运行,这一切都需要几个小时。由于此设置的设计问题,我正在更改此设置,以便可以从控制台启动它。

我需要的所有代码都在一个 dll 中,网站和控制台应用程序都可以访问它。

除了启动消息外,控制台没有输出。

问题是当我从控制台(或从调试器)运行它时,它比从 ASP.NET 网站运行它花费的时间大约长 10 倍(!)。如果 ASP.NET 版本比控制台慢,我会更容易理解。

为什么会这样,或者我该如何调试或找出原因或解决问题?

编辑: 通过 Visual Studio 调试器尝试两种变体时也会发生这种情况。从“调试”到“输出”窗口的输出类似于:

线程 '' (0x1d34) 以代码 0 (0x0) 退出。线程 '' (0xf20) 以代码 0 (0x0) 退出。线程 '' (0x3414) 以代码 0 (0x0) 退出。线程 '' (0x35c8) 以代码 0 (0x0) 退出。线程 '' (0xdc) 以代码 0 (0x0) 退出。线程 '' (0x1c98) 以代码 0 (0x0) 退出。线程 '' (0x3308) 以代码 0 (0x0) 退出。线程 '' (0x2b00) 以代码 0 (0x0) 退出。线程 '' (0x2f7c) 以代码 0 (0x0) 退出。线程 '' (0x345c) 以代码 0 (0x0) 退出。线程 '' (0x2a18) 以代码 0 (0x0) 退出。线程 '' (0x138) 以代码 0 (0x0) 退出。线程 '' (0x3650) 以代码 0 (0x0) 退出。线程 '' (0x376c) 以代码 0 (0x0) 退出。

除了在 ASP.NET 情况下,此文本的编写速度大约快 10 倍。

也许还值得一提的是,该 dll 通过 COM 为每个下载的页面调用 7zip 来压缩它。