簡體   English   中英

ASP.NET C#Parallel.ForEach性能提升

[英]ASP.NET C# Parallel.ForEach performance gain

我有一個ASP MVC控制器在for循環中聯系一堆http站點。 喜歡:

foreach(string provider in providers){
    // get data from asomehttp URL
}

這大約需要4秒鍾才能執行...

我試過了:

Parallel.ForEach(providers, (provider) => {
     // get data from some http URL
});

而且我完全看不到性能提升!

為什么是這樣?

源集合已分區,並且根據系統環境在多個線程上安排了工作。 系統上的處理器越多,並行方法運行的速度就越快。 對於某些源集合, 根據源的大小和所執行工作的種類,順序循環可能會更快。 有關性能的更多信息,請參見數據和任務並行性中的潛在陷阱 不要假設並行總是快的,在某些情況下,並行循環的運行可能比順序運行的慢。 基本的經驗法則是,具有很少迭代和快速用戶委托的並行循環不太可能加快速度。

在並行化任何代碼(包括循環)時,一個重要的目標是盡可能多地利用處理器,而不會過度並行化到並行處理的開銷抵消任何性能優勢的地步。 在此特定示例中 ,僅並行化外循環,因為在內循環中執行的工作量不大。 少量工作和不良緩存效果的結合會導致嵌套並行循環中的性能下降。 因此,僅並行化外循環是使大多數系統上的並發效益最大化的最佳方法。

要回答您的問題,這取決於源的大小和正在執行的工作類型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM