我搜索了Stackoverflow和谷歌,但无法找到我的情况的答案 . 这是我的设计 .

1)我定义了两个状态机工作流程(父和子) . 父WWF监视子WWF的状态,子WWF实际执行给定消息的任务 .

2)父WWF生成其中500个子WWF(instance.Start()) . 然后使用父WWF内的复制器活动控件(并行执行模式),触发子启动事件 .

3)代码托管在VM(8 GB RAM,4个CPU核心,带有自己的应用程序池的IIS 7.0)中 .

我注意到执行相同代码的两种不同行为:

A)有时候执行只需8秒就能完成所有500名儿童WWF的处理,这是一个很好的 .

B)然而,在所有500个孩子的父WWF中执行Instance.Start()之后,复制器活动只是挂起30-40秒无所事事,然后每个子WWF几乎按顺序处理 . 因此,完成8秒前完成的相同工作需要大约300-400秒 .

根据我的发现,我认为这一切都来自线程池管理 . 由于我的代码不是直接处理ThreadPool.QueueWorkItem()而且WWF实际上在场景后面的不同线程上工作,因此我对WWF的线程管理几乎没有控制权 .

在方案B中,当我观察系统性能时,CPU会在几秒钟内上升到80%然后下降 . 之后,在实际开始处理每个子WWF过程之前,没有30-40秒的活动 .

那么瓶颈/缓慢在哪里?我们如何解决这种偶然的暂停行动?

有什么建议?

谢谢你的时间 .