我使用 -任務並行庫消耗生產服務器上大量的空間
Task task = new Task(delegate { GetRecordsForEmailReplies(headingList, partialEntity); });
task.Start();
運行一些重方法,但問題是它消耗大量的服務器CPU的 空間一段時間IIS工作進程增加到60%以上 這就是爲什麼服務器卡住了。
有沒有解決方案來解決這個問題,請讓我知道嗎?或任何其他選項來運行這些沉重的方法而不阻止頁面加載?
我使用 -任務並行庫消耗生產服務器上大量的空間
Task task = new Task(delegate { GetRecordsForEmailReplies(headingList, partialEntity); });
task.Start();
運行一些重方法,但問題是它消耗大量的服務器CPU的 空間一段時間IIS工作進程增加到60%以上 這就是爲什麼服務器卡住了。
有沒有解決方案來解決這個問題,請讓我知道嗎?或任何其他選項來運行這些沉重的方法而不阻止頁面加載?
用於創建新Task
或Task<T>
建議的裝置是與.NET 4.0或Task.Run
使用Task.Factory.StartNew
與.NET 4.5。 Stephen Toub here有關該主題的詳細說明。
他解釋說,它的效率更高:
例如,我們採取了很多照顧TPL內,以確保訪問從多個線程任務時同時,「正確」的事情發生了。任務只執行一次,這意味着我們需要確保同時從多個線程多次調用任務的Start方法只會導致該任務被調度一次。
再次使用Task.Run
代替:
Task.Run(() => GetRecordsForEmailReplies(headingList, partialEntity));
我嚴重懷疑這實際上會產生重大影響。 – svick
因爲我是新來使用任務,我也關心,如果成千上萬的用戶會一次訪問相同的功能,這將能夠處理應用程序池? –
這是很難說的不知道周圍的代碼的東西。你能否提供更多關於如何調用此方法的信息?順便說一句,更好的開始任務的方法是使用'Task.Run(()=> GetRecordsForEmailReplies(headingList,partialEntity))''。 –
毫無疑問,您需要數百萬個「任務」才能創造出明顯的CPU壓力。無論你的問題是什麼,它都不會與TPL一起使用 - 這將歸功於你的專有代碼。 –