2012-10-23 76 views
0

並行Foreach中我打電話給一個服務,它提供了關於一篇文章的所有信息,如果我嘗試僅使用一個需要6秒的信息。如何驗證Parallel.Foreach是否正常工作

我有關的問題:

  • 如果我要花費大約4篇文章的信息,如何需要多長時間? + - 6秒??

  • 實際上這樣做需要27秒,有一個簡單的方法來檢查它是否在並行工作?

用C#MVC3工作

代碼:

private void PopulateArticleDictionary() 
    { 
     List<Article> tmpArticleFirstLevel = new List<Article>(); 
     Parallel.ForEach<Article>(ArticlesFirstLevel, 
      article => 
      { 
       var articleInDepth = ArticleService.SearchByCode(article.Code, article.Code18, article.Quantity, "ES", "EUR"); 
       if (articleInDepth == null) 
       { 
        tmpArticleFirstLevel.Add(article); 
       } 
       else 
       { 
        tmpArticleFirstLevel.Add(articleInDepth); 
       }     

      } 
      );    
     ArticlesFirstLevel = tmpArticleFirstLevel; 
    } 

感謝的!

+0

你爲什麼認爲它不起作用? –

+0

也許相關:http://stackoverflow.com/questions/2960056/trying-to-run-multiple-http-requests-in-parallel-but-being-limited-by-windows – Prinzhorn

+0

'列表'不是線程 - 安全的多個作家。使用'System.Collections.Concurrent'命名空間中的鎖或其他東西。 –

回答

0

你有多少核心?如果沒有額外的處理器來利用並行庫,則並行庫不會啓動額外的線程。另外還有一些開銷,在4篇文章上做並行可能不是真的值得,除非你有很多正在進行的研究。

你也確定你的服務不是瓶頸嗎?

試試這個,看看是否有改善

System.Net.ServicePointManager.DefaultConnectionLimit = 1000; 

你可以有連接到您的服務爲.NET開箱的瓶頸只允許2個併發的HTTP管道在同一臺主機。

+0

你說得對! :D首先感謝您的快速響應,服務配置爲syncro,供應商必須改變它。-.-'現在是跳舞江南風格的時候了。問候!! – user1520494