【发布时间】:2021-12-24 20:37:04
【问题描述】:
我有一个方法可以在一个循环中创建 1000 个表面并将它们存储在列表中:
List<Surface> surfaces = new List<Surface>();
for (int i = 0; i < 1000; i++){
Surface surface = builder.buildSurface(int length, int width, new Position (x, y, z);
surfaces.Add(surface);
x +=2; y+= 4, z++; // each surface is shifted every iteration
}
当所有表面都生成后,我可以按任何特定顺序输出它们,例如以矩阵形式 A[i][j]。
如何并行创建表面和跟踪位置/索引?我认为每个表面创建可以并行执行,但我想知道它是根据表面位置输出的索引。
是否可以创建一个 TheadPool 来并行生成 1000 个表面并将它们存储在 ConcurrentDictionary
附:我试图用 Parallel.Invoke 将方法分成两半:
Parallel.Invoke(
() => builder.buildLeft(),
() => builder.buildRight());
所以执行时间减少了将近 2 倍,但我想利用 CPU 的所有内核来完成这样耗时的任务。
【问题讨论】:
-
我猜你要找的是Parallel.ForEach 或Parallel.For。但是,您必须以某种方式准备
x、y和z值 -
Parallel.For 会起作用,但它会以随机顺序生成表面,而我会随着每次迭代从 0 到 1000 逐渐改变 Position(x,y,z)。
标签: c# multithreading concurrency parallel-processing task-parallel-library