2015-09-28 47 views
2

我正在開發使用Windows工作流的應用程序。工作流的一個區域使用運行AsyncCodeActivity的Parallel.ForEach活動。你可以在下面的屏幕截圖中看到它。 RunPolicyWorkflow活動是一個AsyncCodeActivity。Windows工作流的限制線程

enter image description here

從我從Windows工作流文檔明白的是,根據需要對在ParalleForEach活動所列舉的收集工作,這將創建新的線程。

我在並行環路中有大約16000個項目。在循環內部(在RunPolicyWorkflow Activity期間)我正在做一些CPU工作,但大部分時間都花在將結果保存到SQL Server實例上。在使用資源監視器監視我的進程時,我注意到在此進程中有大約2,000個線程正在運行該工作流程。

它看起來像我的應用程序越慢它創建的線程越慢。我的電腦只有8個邏輯處理器,所以我很確定這不是很好的優化。

有誰知道一種方法來限制Windows Workflow創建的線程數量?還是有人有任何建議的方式,這可以做得更好?並行循環中的所有項目都是相互獨立的,我希望儘可能快地處理集合中的所有項目(16000)。最初,它的處理量約爲每分鐘300件,但隨着線程數越來越高,處理的物品越來越多,每分鐘低至約60件。

+0

你確定sql-server可以處理那個負載嗎?那些線程並不都等待事務在sql-server上被提交? – rene

+0

一個簡單的搜索給了http://stackoverflow.com/questions/16365049/restrict-number-of-threads-in-parallel-foreach-in-windows-workflow-foundation-4 – ata

回答