私は実際のコンピューティングタスクに似た偽のテストを行いました。私の現在のコードは次のとおりです。C#1つの長いコンピューティングプロセスを並列化する最適な方法は何ですか?
static void Main()
{
List<ulong> list = new List<ulong>();
Action action =() =>
{
Random rng = new Random(Guid.NewGuid().GetHashCode());
ulong i = 0;
do
{
i++;
if (rng.Next(100000000) == 1000)
{
lock (list) list.Add(i);
Console.WriteLine("ThreadId {0}, step {1}: match is found",
Thread.CurrentThread.ManagedThreadId, i);
}
} while (list.Count < 100);
};
int length = Environment.ProcessorCount;
Action[] actions = new Action[length];
for (int i = 0; i < length; i++)
actions[i] = action;
Parallel.Invoke(actions);
Console.WriteLine("The process is completed. {0} matches are found. Press any key...",
list.Count);
Console.ReadKey();
}
は一つの長い計算処理のための並列タスクの数を最適化するために任意のより良い方法はありますか?
子孫に不安な 'List'を' lock'するのではなく 'ConcurrentBag'のようなTPLコレクションをチェックアウトする必要があります – MickyD
@MickyD。 [こちら](http://stackoverflow.com/a/29307598/6123485)を見て、自分で試してみてください。やった。 – quicktrick
OPにdownvotingする人に。あなたがそのような場合のよりよいアプローチを知っているなら、downvotingの代わりにあなたの答えを与えてください。私はこの質問をする前にインターネットを非常に長い間探してきました。私はまだそのようなタスクのためのより良い解決策を見つけていない。 – quicktrick