在并行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;
}
谢谢!
答案 0 :(得分:0)
您有多少个核心?如果您没有额外的处理器来利用它,并行库将不会启动额外的线程。还有一些开销,在4篇文章上做并行可能并不值得,除非你有很多嘎吱嘎吱声。
你还确定你的服务不是瓶颈吗?
试试这个,看看是否有改进
System.Net.ServicePointManager.DefaultConnectionLimit = 1000;
您可能有一个瓶颈连接到您的服务,因为.NET开箱即用只允许2个并发HTTP管道连接到同一主机。