【发布时间】:2010-09-23 17:15:54
【问题描述】:
寻求关于利用 AsParallel() 或 Parallel.ForEach() 加快速度的小建议。
请参阅下面的方法(此示例的简化/混蛋)。
它需要一个类似“US, FR, APAC”的列表,其中“APAC”可能是其他 50 个“US, FR, JP, IT, GB”等国家的别名。该方法应采用“US, FR, APAC”,并将其转换为“US”、“FR”以及“APAC”中的所有国家/地区的列表。
private IEnumerable<string> Countries (string[] countriesAndAliases)
{
var countries = new List<string>();
foreach (var countryOrAlias in countriesAndAliases)
{
if (IsCountryNotAlias(countryOrAlias))
{
countries.Add(countryOrAlias);
}
else
{
foreach (var aliasCountry in AliasCountryLists[countryOrAlias])
{
countries.Add(aliasCountry);
}
}
}
return countries.Distinct();
}
让这个并行化就像把它改成下面那样简单吗?使用AsParallel() 有比这更多的细微差别吗?我应该使用Parallel.ForEach() 而不是foreach 吗?并行化 foreach 循环时应该使用哪些经验法则?
private IEnumerable<string> Countries (string[] countriesAndAliases)
{
var countries = new List<string>();
foreach (var countryOrAlias in countriesAndAliases.AsParallel())
{
if (IsCountryNotAlias(countryOrAlias))
{
countries.Add(countryOrAlias);
}
else
{
foreach (var aliasCountry in AliasCountryLists[countryOrAlias].AsParallel())
{
countries.Add(aliasCountry);
}
}
}
return countries.Distinct();
}
【问题讨论】:
-
实际上,没有。我只是想以此作为练习来了解 .NET 中的新并行化。 :)
标签: c# .net multithreading parallel-processing