c# - 限制 Windows 工作流的线程

标签 c# .net performance workflow-foundation-4

我正在开发一个使用 Windows Workflow 的应用程序。工作流的一个区域使用运行 AsyncCodeActivity 的 Parallel.ForEach 事件。您可以在下面的屏幕截图中看到这一点。 RunPolicyWorkflow 事件是一个 AsyncCodeActivity。

enter image description here

据我从 Windows Workflow 文档中了解到,这将根据需要创建新线程,以对在 ParalleForEach 事件中枚举的集合进行操作。

我在并行循环中有大约 16000 个项目。在循环内(在 RunPolicyWorkflow 事件期间)我做了一些 CPU 工作,但大部分时间都花在了将结果保存到 SQL Server 实例上。在使用资源监视器监视我的进程时,我注意到该进程中大约有 2,000 个线程在运行工作流。

看起来我的应用程序创建的线程越多,速度就越慢。我的计算机只有 8 个逻辑处理器,所以我很确定这不是很好的优化。

有谁知道限制 Windows Workflow 创建的线程数量的方法吗?或者有人对可以做得更好的方法有任何建议吗? Parallel 循环中的所有项目都相互独立,我想尽快处理集合 (16000) 中的所有项目。最初它的处理速度约为每分钟 300 个项目,但随着线程数增加和处理的项目越来越多,它会降低到每分钟约 60 个项目。

最佳答案

这是一个限制并行事件的示例事件。

https://msdn.microsoft.com/en-us/library/vstudio/ee620808(v=vs.100).aspx

关于c# - 限制 Windows 工作流的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832450/

相关文章:

mysql - Sphinx 索引器减慢数据库速度 : How to give it low priority?

c# - C# 中的 Active Directory 查询性能

c# - 隐藏继承成员

c# - 从 C# 中的重复字符串中确定唯一字符串

c# - 如何模拟 BitConverter.IsLittleEndian 与我的单元测试相反的环境?

.net - 为什么可选参数不直接编译成 C# 中的等效重载?

c# - 我怎样才能展平嵌套的字符串?

c# - 设置 .Top 属性,移除 Anchor 属性

c# - 如何打开一个新的独立窗体?

performance - Clojure: "transpose"有效地是一个中等大小的 map 列表