C# for 和并行 for 循环与批处理逻辑
C# for and parallel for loops with batches logic
我编写了一个 for 循环,它处理将项目以 20 个为一组添加到列表中,如下所示:
for (int i = 0; i < filteredList.Count; i = i + 20)
{
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
}
这对于较小的列表来说绝对没问题。所以现在我想在处理包含 10-15000 项的较大列表时使用并行 for 循环来加快处理速度?
我试过这样的事情:
Parallel.For(0,filteredList.Count, i=>{
i+=20;
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
});
但这并没有给我想要的结果...除了常规的 for 循环之外,还有什么方法可以以更快的方式执行批量插入,从而比普通的 for 循环缩短执行时间?
List<T>
不是 线程安全的,这就是为什么
Parallel.For(... {
...
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
...
});
是一种错误的技术。尝试使用 Parallel Linq (Plinq) 代替:
newList.AddRange(filteredList
.AsParallel()
.Select((value, index) => new {
value = value,
index = index })
.GroupBy(item => item.index / 20)
.Select(chunk => GetResponse(chunk.Select(item => item.value))));
我编写了一个 for 循环,它处理将项目以 20 个为一组添加到列表中,如下所示:
for (int i = 0; i < filteredList.Count; i = i + 20)
{
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
}
这对于较小的列表来说绝对没问题。所以现在我想在处理包含 10-15000 项的较大列表时使用并行 for 循环来加快处理速度?
我试过这样的事情:
Parallel.For(0,filteredList.Count, i=>{
i+=20;
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
});
但这并没有给我想要的结果...除了常规的 for 循环之外,还有什么方法可以以更快的方式执行批量插入,从而比普通的 for 循环缩短执行时间?
List<T>
不是 线程安全的,这就是为什么
Parallel.For(... {
...
newlist.Add(GetResponse(filteredList.Skip(i).Take(20)));
...
});
是一种错误的技术。尝试使用 Parallel Linq (Plinq) 代替:
newList.AddRange(filteredList
.AsParallel()
.Select((value, index) => new {
value = value,
index = index })
.GroupBy(item => item.index / 20)
.Select(chunk => GetResponse(chunk.Select(item => item.value))));