所以我很好奇,处理集合中每个项目的最快方法是什么? 让我们在这里看看这个例子。
假设列表包含200个字符串。
var names = new List<string>();
foreach (var name in names)
{
ProcessString(name);
}
显然,列表中的每个字符串都一个接一个地
,然后尝试对其进行处理。
public static void ProcessString(string name)
{
//Do some heavy work with name that might take some time, it would be different for each string.
var r = new Random();
Thread.Sleep(r.Next(100, 30000));
}
此方法可能非常慢,所以我想使其更快一点。
我发现最快的方法是使用Parallel.Foreach
Parallel.ForEach(
names,
new ParallelOptions { MaxDegreeOfParallelism = 64 },
name =>
{
var r = new Random();
Thread.Sleep(r.Next(100, 30000));
}
);
这样,它不会跳过任何内容,并且不会两次运行相同的字符串。 太好了。
这就是陷阱。
默认情况下,For
和ForEach
将利用底层调度程序提供的许多线程,因此将MaxDegreeOfParallelism
更改为默认值仅会限制将使用的并发任务数。
有没有更快的方法来处理列表中的每个项目?不会跳过任何一个或两次运行相同的字符串?