如何验证Parallel.Foreach是否正常工作

时间:2012-10-23 06:23:42

标签: c# asp.net-mvc asp.net-mvc-3 parallel.foreach

在并行Foreach内部我正在调用一个服务,它向我提供有关文章的所有信息,如果我尝试仅获取一个信息需要6秒。

我的问题:

  • 如果我想了解有关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;
    }

谢谢!

1 个答案:

答案 0 :(得分:0)

您有多少个核心?如果您没有额外的处理器来利用它,并行库将不会启动额外的线程。还有一些开销,在4篇文章上做并行可能并不值得,除非你有很多嘎吱嘎吱声。

你还确定你的服务不是瓶颈吗?

试试这个,看看是否有改进

   System.Net.ServicePointManager.DefaultConnectionLimit = 1000;

您可能有一个瓶颈连接到您的服务,因为.NET开箱即用只允许2个并发HTTP管道连接到同一主机。