2016-04-18 38 views
0

我使用 -任務並行庫消耗生產服務器上大量的空間

Task task = new Task(delegate { GetRecordsForEmailReplies(headingList, partialEntity); }); 
task.Start(); 

運行一些重方法,但問題是它消耗大量的服務器CPU的 空間一段時間IIS工作進程增加到60%以上 這就是爲什麼服務器卡住了。

有沒有解決方案來解決這個問題,請讓我知道嗎?或任何其他選項來運行這些沉重的方法而不阻止頁面加載?

+0

這是很難說的不知道周圍的代碼的東西。你能否提供更多關於如何調用此方法的信息?順便說一句,更好的開始任務的方法是使用'Task.Run(()=> GetRecordsForEmailReplies(headingList,partialEntity))''。 –

+0

毫無疑問,您需要數百萬個「任務」才能創造出明顯的CPU壓力。無論你的問題是什麼,它都不會與TPL一起使用 - 這將歸功於你的專有代碼。 –

回答

0

用於創建新TaskTask<T>建議的裝置是與.NET 4.0Task.Run使用Task.Factory.StartNew.NET 4.5Stephen Toub here有關該主題的詳細說明。

他解釋說,它的效率更高:

例如,我們採取了很多照顧TPL內,以確保訪問從多個線程任務時同時,「正確」的事情發生了。任務只執行一次,這意味着我們需要確保同時從多個線程多次調用任務的Start方法只會導致該任務被調度一次。

再次使用Task.Run代替:

Task.Run(() => GetRecordsForEmailReplies(headingList, partialEntity)); 
+1

我嚴重懷疑這實際上會產生重大影響。 – svick

+0

因爲我是新來使用任務,我也關心,如果成千上萬的用戶會一次訪問相同的功能,這將能夠處理應用程序池? –