我在通過ThreadPool.QueueUserWorkItem調用的ASP.NET應用程序中對Web服務進行了冗長的調用。通話需要大約2分鐘才能完成,並向第三方數據存儲發送大約2000條記錄。一切似乎都在順利進行,除了我注意到在運行IIS7的生產環境中進行這些調用時,只有一個CPU正在使用,並且正在被最大化。還有什麼需要做的,以確保線程池將利用所有可用的內核?ThreadPool.QueueUserWorkItem只使用3個核心中的1個
0
A
回答
3
假設你使用的是.NET 4.0+
如果你有2000條記錄,並需要做出相關的2000調用某種類型的服務,您可以使用此方法:
List<RecordType> records = GetMyRecords();
Parallel.ForEach(records, record => {
MakeMyServiceCall(record);
});
這將並行運行每個單獨記錄的MakeMyServiceCall方法;並行庫使用場景後面的ThreadPool線程,這些線程將透明地將負載分佈在可用內核上。
+0
這將完全適合我的呼叫外部服務。我還有一個將這些記錄寫入本地數據庫的調用,該數據庫當前正在通過單獨的ThreadPool.QueueUserWorkItem調用完成。我想知道是否可以將Parallel.Foreach應用於此數據庫插入調用而不會創建競爭條件?它寫入一個表,檢索標識,然後寫入相關的表。 –
+0
簡短的回答:是的,你可以使用這個數據庫插入。你如何處理這個問題真的取決於你如何做你的插入:純粹的ADO,EF等 – maf748
相關問題
- 1. 3個UIViewControllers中的核心數據
- 2. n-1核心的一個襯墊?
- 3. Gwan - 爲什麼gwan只確定1個核心?
- 4. 爲什麼Visual Studio 2015只能使用1核心的50%?
- 5. MySQL服務器只使用1出48個CPU核心與GROUP BY查詢
- 6. libc.so.1中的核心
- 7. 爲什麼ATLAS僅使用1個Octave核心? (Linux Mint的17.2)
- 8. 將1個cpu核心分配給1個線程C++
- 9. KohanaPHP 3核心拋出一個錯誤
- 10. 核心圖:重新加載/刷新核心圖中的3個餅圖
- 11. 如何獲得keras + theano使用> 1個核心
- 12. Python/mysolr:只選擇一個核心
- 13. 如何在ASP.NET核心使用UseStaticFiles 1
- 14. 24核心和MYSQL使用1上INSERT
- 15. 使用SHA-1在.NET核心
- 16. CakePHP 3一個核心,多個應用程序
- 17. 使用SqlBulkCopy與ASP.Net核心導入一個.CSV核心
- 18. openmp隨機使用只有一個核心
- 19. C-pthreads似乎只使用一個核心
- 20. Neo4j在運行Cypher查詢時只使用一個核心
- 21. ThreadPool.QueueUserWorkItem使用ASP.Net
- 22. R foreach不使用多個核心
- 23. 無法讓java使用多個核心
- 24. 使用核心數據(多個ViewControllers)
- 25. R包自動使用多個核心?
- 26. VCBuild使用超過4個核心
- 27. dse spark-submit:提交作業時未使用內核(正在運行的應用程序「Cores = 0」,每個核心有3個可用的核心)
- 28. 框架中的核心數據只顯示一個實體
- 29. 無法使用核心圖在3個不同視圖中繪製3個圖形iOS
- 30. 使用核心數據與核心圖
您排隊了2000個項目,還是排隊了一個包含2000個記錄的項目? –
1項包含2000條記錄。由ThreadPool.QueueUserWorkItem調用的方法遍歷2000條記錄,並通過SOAP客戶端和服務引用將每條記錄發送到第三方數據存儲區,這是SOAP調用,它真的讓事情停滯不前。每個記錄僅發送4個字段,並且只包含小字符串和整數。 –
那麼......問題是什麼?你排隊等待1個項目,這意味着你正在進行1個方法調用,你可能不會排隊並簡單地調用它。基本上,你沒有做多線程。 –