问题标签 [parallel.for]

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 回答
209 浏览

c# - 使用 Paraller.For 时,对象当前正在其他地方使用错误

我正在尝试使用下面的代码对图像进行并行化操作,但出现One or more errors occurred错误。

查看内部异常,我可以看到发生了错误{"Object is currently in use elsewhere."}

注意:CoverImageSecretImageBitmaps

我尝试使用这样的互斥锁:

但仍然无济于事(我得到同样的错误)。

0 投票
5 回答
4537 浏览

c# - 写入具有多个流 C# 的文件

我正在尝试使用 HTTP 将大文件 (>1GB) 从一台服务器下载到另一台服务器。为此,我正在并行发出 HTTP 范围请求。这让我可以并行下载文件。

保存到磁盘时,我正在获取每个响应流,打开与文件流相同的文件,寻找我想要的范围,然后写入。

但是,我发现除了一个响应流之外的所有响应流都超时了。看起来磁盘 I / O 跟不上网络 I/O。但是,如果我做同样的事情,但让每个线程写入一个单独的文件,它就可以正常工作。

作为参考,这是我写入同一文件的代码:

这是写入多个文件的代码:

我的问题是,C#/Windows 在从多个线程写入单个文件时是否会采取一些额外的检查/操作,这会导致文件 I/O 比写入多个文件时慢?所有磁盘操作都应该受磁盘速度的约束吗?谁能解释这种行为?

提前致谢!

更新:这是源服务器抛出的错误:

“无法将数据写入传输连接:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。” [System.IO.IOException]:“无法将数据写入传输连接:连接尝试失败,因为连接方在一段时间后没有正确响应,或者连接失败,因为连接的主机没有响应。” InnerException:“连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应”消息:“无法将数据写入传输连接:

0 投票
2 回答
486 浏览

c# - Parallel.For "线程本地状态"

MSDN

我的问题是:parallel.for中的第三个参数,它是做什么的?

当我将其更改为 ()=> 1d 时,它会使我的结果加倍,设置为 2 时它会增加三倍,但它会忽略小数。

如果它是某种加倍,为什么它会忽略小数?那里到底发生了什么?

我现在尝试添加锁。而且它不只是将 interimresult 初始化为指定的值。

这是我使用的代码:

0 投票
2 回答
3987 浏览

c# - Parallel.For 不使用所有内核

我正在使用块Math.Net Numerics内的并行进行繁重的数学计算Parallel.For

当我在具有 4 个内核(2*2)的本地系统中运行代码时,它使用了所有 4 个内核。

但是当我在我们的 8 核(4*2)开发服务器上运行相同的代码时,它只使用了 4 个核。

我试过设置 MaxDegreeOfParallism,但无济于事。

知道为什么没有使用所有内核。

下面是示例代码。

0 投票
1 回答
682 浏览

c# - 订购并发字典。为什么这不起作用?

我们有一个 C# 应用程序,它在 Excel 文档中的工作表上填充表格。

必须按照从数据库返回行的顺序填充表。

对象 DataFileColData 定义为 List 并包含结果集行。出于测试目的,我只使用列表中的 [0]。

下面的代码段 #1 不起作用。不保留行顺序,因为最终结果显示的数据乱序,尽管数字本身是按顺序列出的:

下面的代码段 #2 确实适用于与保留的每一行关联的行顺序和数据:

我不明白为什么。我认为不需要锁定机制,因为每个线程都有自己的“i”实例,并且 ConcurrentDictionary 应该是线程安全的。

有人可以向我解释为什么代码没有按照我认为的方式工作吗?

谢谢!


根据@Enigmativity 下面的评论更新代码。

MSDN 文档不是很清楚(无论如何对我来说),但似乎确实更新了 DataTable,即使 MSDN 文档在执行 NewRow() 方法时没有表明它确实如此。

新的工作代码如下:

0 投票
1 回答
99 浏览

c# - 使用 ParallelFor 改变列表视图

我有一个修改我的列表视图“inputList”的函数,列表视图有 5 列。该功能应该检查列表视图中的单元格,如果没有错误,最后一列中的单元格将具有绿色背景的“NORMAL”,如果有问题,它将在单元格中显示带有红色背景的“ERROR”在最后一列中,并更改其他列中同一行中错误单元格的颜色。

有 4k 个项目,我知道拥有这么多项目是没有意义的,因为用户不会阅读它们,但我被要求这样做。

我正在使用带有 backgroundworker 的函数,但它不够快,并且认为 parallelFor 会更快。但是当我尝试parallelFor时,它冻结了程序。

这是 backgroundworker 的功能,它正在工作但它太慢了:

这是 ParallelFor 的功能,即使我尝试一个只有项目的非常小的示例,程序也会停止工作。

如何在没有参考的情况下将列表视图的所有项目复制到列表中?我认为直接在列表视图中添加/修改,并且调用会减慢函数的速度,因此创建:List<ListViewItem> tList

我会修改 tList 中的所有内容,然后我会使用inputList.Items.AddRange(tList.ToArray()); 这将删除循环内的所有调用。

但是 tItemsTemp,tItems,tList 都是引用...如何通过创建引用进行复制?

0 投票
1 回答
83 浏览

c# - Parallel.For 线程数是在运行时还是在编译时决定的?

我读到了 Parallel.For 和 Parallel.Foreach 创建的线程数取决于计算机中的内核数,但是这个数字是在执行 .exe 期间决定/计算的,还是在编译程序时决定/计算的?

例如,如果我在将创建 4 个线程的计算机 A 中编译,然后在另一台具有不同内核数的计算机 B 中执行 .exe,它将创建 4 个线程还是线程数将取决于计算机B的核心?

0 投票
0 回答
75 浏览

c# - 在Parallel.For中解析数组的快速或正确方法是什么

我有一个包含 Zmap 数据(ea 高度数据)的大型单维数组,该数组非常大,它由一个区域像素的 100 个测量样本组成。我需要以几种方式处理它,以便可以更正另一个锁定的位图。为了加快处理这个大数组,我使用了 parallel.for

即:

depthdata[sampleN]上面的代码有效,但我对访问我现在的方式有些怀疑。我在这里担心的是,我认为线程可能会在每次启动线程以从中检索数据时锁定数组。所以我想知道在 Parallel.for 中使用“外部块”数组数据的正确方法是什么

请注意,在上面的 void 中,不需要更改 depthdata 本身,只需对位图执行操作(使用 lockbits 位图)。

0 投票
0 回答
193 浏览

c# - 如何在循环外停止并行 for 循环过程?

我从 开始并行 for 循环过程button click(Start Button)。并行进程进展顺利,但当时我移动了另一个页面,然后我返回到当前并行进程页面,进程进展顺利。

我尝试从另一个停止并行进程button click(button stop)。可能吗?

0 投票
1 回答
65 浏览

c# - 线程并行交换

我需要将我的程序与线程交换为并行 for 循环,但我不知道该怎么做。

这是我的线程代码: