【发布时间】:2015-09-28 21:56:06
【问题描述】:
我正在开发一个使用 Windows 工作流的应用程序。工作流的一个区域使用运行 AsyncCodeActivity 的 Parallel.ForEach 活动。您可以在下面的屏幕截图中看到这一点。 RunPolicyWorkflow 活动是一个 AsyncCodeActivity。
根据我从 Windows 工作流文档中了解到的情况,这将根据需要创建新线程,以对 ParalleForEach 活动中枚举的集合进行操作。
我在并行循环中有大约 16000 个项目。在循环内部(在 RunPolicyWorkflow 活动期间)我正在做一些 CPU 工作,但大部分时间都花在将结果保存到 SQL Server 实例上。当使用 Resource Monitor 来监视我的进程时,我注意到这个进程中有大约 2,000 个线程正在运行工作流。
看起来我的应用程序创建的线程越多越慢。我的电脑只有 8 个逻辑处理器,所以我很确定这不是很好的优化。
有人知道限制 Windows 工作流创建的线程数量的方法吗?或者有人对可以做得更好的方式有任何建议吗? Parallel 循环中的所有项目都是相互独立的,我想尽快处理集合(16000)中的所有项目。最初它的处理速度约为每分钟 300 个项目,但随着线程数的增加和处理的项目越来越多,它会降低到每分钟约 60 个项目。
【问题讨论】:
-
你确定 sql-server 可以处理这个负载吗?这些线程不是都在等待事务在 sql-server 上提交吗?
标签: c# .net performance workflow-foundation-4