一部のコードを.NET2から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.");