问题标签 [plinq]

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 投票
2 回答
946 浏览

c# - LINQ - 如果我有很多更改,我应该以某种方式定期 SubmitChanges() 吗?

我有一批“机器人”围绕读取 RSS 线程运行并将结果存储在数据库中,并且我将其并行化以便可以一次获取许多提要:

'ProcessRssFeed' 函数可以在找到记录时将它们插入到上下文中,并且每个提要可以是从零到数百个项目的任何地方。有很多提要,所以我不想为每个提要创建一个 LINQ DataContext。

不过,我担心我可能会在客户端上积累成千上万条记录。我想我可能会耗尽内存。

因为如果可能的话,这里没有并发问题,我想告诉 DataContext “如果你愿意,请继续并定期提交记录”。有没有一些实用的方法来实现这一点?

0 投票
3 回答
4807 浏览

linq - C#/Linq 中的二维数组求和

我有一个二维整数数组。我想编写一个优化且快速的代码来对二维数组的所有列求和。

有什么想法可以使用 LINQ/PLINQ/TASK 并行化来做到这一点吗?

前任:

0 投票
3 回答
10843 浏览

c# - 等效于 do() while{} 并行

如何在下面的方法中创建与do-while或类似的并行等效项Update()

应用程序中的另一个线程随机写入TestBufferTestBuffer.RemoveItemAndDoSomethingWithIt();应该运行直到TestBuffer为空。目前Update()仅使用枚举时集合中的项目运行,这是有道理的。

0 投票
2 回答
180 浏览

excel - 利用 Parallel / PLINQ 在所有 Excel 工作表单元格中查找关键字的最佳方法

作为标题,我有一个类似于 Excel 的对象模型List<string> keywords;Workbook

我想获取WorkbookCell与列表中的关键字匹配的所有内容。

我在想也许并行搜索是个好主意:

实际上这会不会太平行了?如果您有更好的想法,请告诉我。

** 在正常情况下,我的工作表少于 20 个,但每个工作表将包含超过 10000 行和数百列。

0 投票
1 回答
845 浏览

c# - 使 PLINQ 和 BlockingCollection 一起工作

我已经组装了一个简单的应用程序,它监视文件创建事件,从文件内容创建一些对象,并进行一些处理。这是示例代码:

一切正常,但是当我取消注释 AsParallel (以及接下来的两行)时,它不会立即产生结果。这种延迟可能是由 PLINQ 分区引起的?但是,我希望此查询在将项目添加到 BlockingCollection 后立即生成项目。这可以使用 PLINQ 实现吗?

0 投票
4 回答
5540 浏览

c# - Thread.Sleep 阻塞并行执行任务

我正在调用一个工作方法,该方法调用数据库,然后迭代并产生返回值以进行并行处理。为了防止它破坏数据库,我在那里有一个 Thread.Sleep 来暂停对数据库的执行。但是,这似乎会阻止仍在 Parallel.ForEach 中发生的执行。实现此目的以防止阻塞的最佳方法是什么?

编辑:我将其更改为包含答案,但它仍然无法按我的预期工作。我将 .AsParallel().WithDegreeOfParallelism(10) 添加到 GetWorkItems() 调用中。当我认为 Parallel 即使在基本线程处于休眠状态时也应该继续执行时,我的期望是否不正确?

示例:我有 15 个项目,它迭代并抓取 10 个项目并启动它们。每个完成后,它都会从 GetWorkItems 请求另一个,直到它尝试请求第 16 个项目。此时,它应该停止尝试抓取更多项目,但应该继续处理项目 11-15,直到这些项目完成。并行应该如何工作?因为它目前没有这样做。它目前正在做的是当它完成 6 时,它锁定后续 10 仍然在 Parallel.ForEach 中运行。

0 投票
3 回答
862 浏览

c# - 记录线程在到达锁定语句时等待的时间

当一个线程到达一个线程时,有没有一种快速的方法来记录一个线程正在等待一个锁?

?

如果线程 1 到达锁,并且块中没有另一个线程,则应该没有日志。那么如果线程 2 到达 lock(x) 并且线程 1 仍然在块中,那么应该有一个日志。理想的解决方案不需要切换到 Mutex 或 Monitor 会增加太多复杂性。如果有一种使用 TPL、PLINQ 或 RX 的快速简便的方法来做到这一点,那就太好了。

0 投票
1 回答
885 浏览

c# - 使用 PLINQ,如何在使用 AsParallel().MaxDegreeOfParallelism(4) 时设置首选块大小?

我有一个包含数千个对象的列表,对其执行可能需要 1 到 3 分钟的操作。我当然在使用 PLINQ,但我注意到当接近输入列表的末尾时,只有一个内核在工作,就像分区是事先确定的一样。

那么,对于 IList,只要有要处理的项目,强制 PLINQ 继续使用工作线程的最佳方法是什么?该计算机具有大量可用的硬件内核。

参考:

0 投票
2 回答
597 浏览

c# - LINQ:如何根据上下文修改 AsParallel 的返回类型?

LINQ 的AsParallel回报ParallelQuery。我想知道是否有可能改变这种行为,以便我可以在实际更改代码的情况下比较使用和不使用并行性运行的 LINQ 语句?这种行为应该类似于Debug.Assert- 当DEBUG未设置预处理器指令时,它会被优化。所以我希望能够在AsParallel不将其转换为ParallelQuery.

我想我可以声明自己的扩展方法(因为我不能 override AsParallel)并在其中分析该预处理器指令:

我想知道是否还有其他方法。我要求太多了吗?

0 投票
2 回答
1143 浏览

c# - 使用 Parallel Linq Extensions 合并两个序列,如何首先产生最快的结果?

假设我有两个返回整数 1 到 5 的序列。

第一个返回 1、2 和 3 非常快,但 4 和 5 每个需要 200 毫秒。

第二个以 200 毫秒的延迟返回 1、2 和 3,但快速返回 4 和 5。

联合这两个序列给我的只是数字 1 到 5。

我不能保证这两种方法中的哪一种在什么时候有延迟,所以执行的顺序不能保证我的解决方案。因此,我想并行化联合,以最大限度地减少我的示例中的(人为)延迟。

一个真实的场景:我有一个返回一些实体的缓存和一个返回所有实体的数据源。我希望能够从内部并行化对缓存和数据源的请求的方法返回一个迭代器,以便缓存结果尽可能快地产生。

注 1:我意识到这仍然在浪费 CPU 周期;我不是在问如何防止序列迭代它们的慢元素,而是问我如何尽可能快地合并它们。

更新 1:我已经定制了 achitaka-san 的出色响应以接受多个生产者,并使用 ContinueWhenAll 设置 BlockingCollection 的 CompleteAdding 一次。我只是把它放在这里,因为它会因为缺少评论格式而丢失。任何进一步的反馈都会很棒!