处理集合中每个项目的最快方法是什么

时间:2019-05-06 02:27:45

标签: c# .net

所以我很好奇,处理集合中每个项目的最快方法是什么? 让我们在这里看看这个例子。

假设列表包含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));
                }
            );

这样,它不会跳过任何内容,并且不会两次运行相同的字符串。 太好了。

这就是陷阱。 默认情况下,ForForEach将利用底层调度程序提供的许多线程,因此将MaxDegreeOfParallelism更改为默认值仅会限制将使用的并发任务数。

有没有更快的方法来处理列表中的每个项目?不会跳过任何一个或两次运行相同的字符串?

0 个答案:

没有答案