我正在将一些代码从 .NET 2 转移到 4 并使用 TPL 等。
虽然我确信这个问题一定是在 SO 上的某个地方问过的,但我找不到它。
我知道过度嵌套 TPL 任务可能会损害性能。
for (int y=0; y < h; y++)
for (int x=0; x < w; x++)
grid [x, y] = ((x + 1) * (y + 1));
您会将上面的外部或内部循环替换为 TPL,为什么?如果有一个额外的嵌套级别怎么办?
这是替换了内部循环的代码,在我的情况下它的表现更好了 1 秒。
int w = 10000;
int h = 10000;
int [,] grid = new int [w, h];
int [] index = new int [w * h];
DateTime time = DateTime.Now;
ParallelOptions options = new ParallelOptions();
options.MaxDegreeOfParallelism = Environment.ProcessorCount;
time = DateTime.Now;
for (int y=0; y < h; y++)
{
Parallel.For
(
0,
w,
options,
x =>
{
grid [x, y] = ((x + 1) * (y + 1));
}
);
}
span = DateTime.Now.Subtract(time);
Console.WriteLine("Filled in " + span.TotalSeconds.ToString() + " seconds.");
time = DateTime.Now;
for (int y=0; y < h; y++)
{
Parallel.For
(
0,
w,
options,
(x, state) =>
{
if (grid [x, y] < index.Length)
{
index [grid [x, y]]++;
}
else
{
state.Break();
}
}
);
}
span = DateTime.Now.Subtract(time);
Console.WriteLine("Indexed in " + span.TotalSeconds.ToString() + " seconds.");