问题标签 [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.
c# - 将此 foreach 循环转换为并行执行的正确 PLINQ 语法是什么?
2011 年 5 月 20 日上午 12:49 更新:对于我的应用程序,foreach 仍然比并行解决方案快 25%。并且不要将收集计数用于最大并行度,使用更接近机器上核心数量的东西。
=
我有一个 IO 绑定任务,我想并行运行。我想对文件夹中的每个文件应用相同的操作。在内部,该操作会产生一个 Dispatcher.Invoke,它将计算的文件信息添加到 UI 线程上的集合中。所以,从某种意义上说,工作结果是方法调用的副作用,而不是方法调用直接返回的值。
这是我要并行运行的核心循环
这个循环的上下文在这里:
谢谢你的帮助!
+汤姆
c# - ConcurrentQueue 上的 PLINQ 不是多线程
我在 C# 程序中有以下 PLINQ 语句:
两者都是ConcurrentQueues。arrestQueue
_writeQueue
没有并行运行:
- 运行时,总 CPU 使用率约为 30%,这也是所有其他运行的情况。我有 8 个内核(具有 4 个物理内核的 Core i7 720QM 上的超线程),8 个内核中有 4 个几乎没有任何利用率。其余的运行大约 40%-50%。
- 磁盘使用率通常为 0%,除了查询本地主机上的 Postgres 数据库外,没有网络使用情况(见下文)。
- 如果我在内部某处添加断点
geocodeThis.Geocode()
,Visual Studio 的Thread下拉列表只会显示[ pid ] Main Thread。它永远不会进入任何其他线程。 - 我正在使用Npgsql连接到 Postgres,并且每个线程对一个表运行一些SELECT查询。我正在运行 pgAdmin III 的服务器状态应用程序,它显示pg_stat_activity。通过监控这一点,以及战略断点放置(见上文),我可以看到应用程序永远不会为所有假定的并发线程打开超过 1 个数据库连接
geocodeThis.Geocode()
。即使我将Pooling=false添加到数据库连接字符串中,以强制连接不被池化,我也从未看到超过 1 个连接在geocodeThis.Geocode()
. - Postgres 表在WHERE子句中的每一列上都有索引。即使它的索引很差,我也希望有大量的磁盘使用。如果 Postgres 以任何其他方式支撑事情,似乎它会吸收核心。
这似乎是一个简单的 PLINQ 案例研究,我正在为为什么没有并行运行而摸不着头脑。
.net - 在 DomainService 查询操作中使用 Plinq 的任何性能改进
如果我在我的域服务的查询操作中使用 .AsParallel() 扩展名,我能期待任何性能改进吗?DomainService 使用存储库 (EntityFramework) 来查询数据并为查询操作返回的客户端构建 ViewModel。
这是我的 DomainService 中的一个简单查询操作:
如果我可以使用 PLinq 加快速度,我应该在哪里添加 .AsParallel() 调用?
这里
那里
或者那里
c# - 优化大型 csv 文件写入器 - 使用 TPL PLINQ 的大型表数据读取器
关于如何使用 TPL 和/或 PLINQ 进一步优化的任何提示。
下面的代码在后台工作人员上运行
谢谢你。
linq - C#:链式 Linq 方法和强制转换
我有一个小游戏,我在其中实现了一些碰撞检测。现在我想获取与当前“实体”对象发生冲突的特定类型的所有项目的列表。我想做这样的事情:
我收到以下错误:
谁能解释一下,为什么会这样?
谢谢!
c# - 特定的 plinq 查询
我想选择一个在 C# 中具有最大值的 iddictionary<int, double>
例如
初始字典
选择后
我当前的代码
c# - PLINQ:如何在超过 4 个线程上运行 ParallelQuery?
更新 - 更改了问题的标题以反映我真正追求的内容
考虑以下代码:
当省略对 的调用时WithDegreeOfParallelism
,它分 4 个块执行,总共需要大约 4 秒,这是我所期望的,因为我的 CPU 计数是 3。
但是,当用任何大于 4 的数字调用WithDegreeOfParallelism
时,我总是得到 3 个块,并且总持续时间不低于 3 秒。我预计 12 的值将获得(略多于)1 秒的总持续时间。
我错过了什么?以及如何强制并行执行超过 4 个非 CPU 密集型任务,这就是我所追求的?
更新:我当然可以回去手动启动线程,但我希望新的 PFX 库能让这更容易一些......无论如何,下面的代码给了我大约 1 秒的总执行时间
c# - 如何在 WinForms 应用程序中取消 PLINQ 查询
我正在开发处理大量文本数据收集单词出现统计信息的应用程序(请参阅:源代码词云)。
这是我的代码的简化核心正在做什么。
- 枚举所有带有 *.txt 扩展名的文件。
- 枚举每个文本文件中的单词。
- 按单词分组并计算出现次数。
- 按出现次数排序。
- 输出前 20 名。
LINQ 一切正常。迁移到 PLINQ 给我带来了显着的性能提升。但是......在长时间运行的查询期间的可取消性丢失了。
似乎 OrderBy 查询正在将数据同步回主线程,并且未处理 windows 消息。
在下面的示例中,我根据MSDN How to: Cancel a PLINQ Query 来演示我的取消实现,它不起作用:(
还有其他想法吗?
c# - 何时处置 CancellationTokenSource?
该类CancellationTokenSource
是一次性的。快速浏览一下 Reflector 就证明KernelEvent
了(很可能)非托管资源的使用。由于CancellationTokenSource
没有终结器,如果我们不处置它,GC 就不会这样做。
另一方面,如果您查看 MSDN 文章Cancellation in Managed Threads中列出的示例,则只有一个代码片段处理了令牌。
在代码中处理它的正确方法是什么?
using
如果您不等待,则无法包装开始并行任务的代码。只有在您不等待的情况下取消才有意义。- 当然,您可以
ContinueWith
通过调用添加任务Dispose
,但这是要走的路吗? - 可取消的 PLINQ 查询不同步回来,但只是在最后做一些事情呢?比方说
.ForAll(x => Console.Write(x))
? - 它可以重复使用吗?是否可以将同一个令牌用于多个调用,然后将其与宿主组件一起处置,比如 UI 控件?
因为它没有类似于Reset
清理IsCancelRequested
和Token
字段的方法,所以我认为它不可重用,因此每次启动任务(或 PLINQ 查询)时,都应该创建一个新任务。这是真的吗?Dispose
如果是,我的问题是在这些情况下处理的正确和推荐策略是什么CancellationTokenSource
?
c# - Task.Wait 在 ContinueWhenAll 操作
我正在努力将线程合并到我的 azure 代码中,以便将事物放入队列中。为此,我使用http://www.microsoft.com/download/en/details.aspx?id=19222作为参考。
我将多条消息排入队列的代码如下所示:
现在我的问题是关于继续中的 Task.Wait (根据 MS 提供的文档)。等待您已经知道已经完成的线程似乎有点奇怪,对吗?我能想象的唯一原因是冒泡错误并处理这些错误。我在这里错过了什么吗?