私は2、3か月間「線形」のウィンフォームを作成してきましたが、今はスレッド化を理解しようとしています。
これは約40,000行の私のループであり、この行でタスクを実行するのに約1秒かかります。
foreach (String CASE in MAIN_CASES_LIST)
{
//bunch of code here
}
どうすればいいですか
- 各ループを別々のスレッドに入れます
- 同時にx個以下のスレッドを維持する
私は2、3か月間「線形」のウィンフォームを作成してきましたが、今はスレッド化を理解しようとしています。
これは約40,000行の私のループであり、この行でタスクを実行するのに約1秒かかります。
foreach (String CASE in MAIN_CASES_LIST)
{
//bunch of code here
}
どうすればいいですか
.NET 4を使用している場合は、Parallel.ForEachを利用できます。
Parallel.ForEach(MAIN_CASES_LIST, CASE =>
{
//bunch of code here
});
ここで役立つかもしれないSmartThreadPoolと呼ばれる素晴らしいライブラリがあります。それはスレッド化とキューイングで多くの有用なことを行い、これらのほとんどをあなたから抽象化します
それが役立つかどうかはわかりませんが、大量の作業項目をキューに入れたり、スレッドの数を制限したりすることができます。
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
もちろん、マルチスレッドで手を汚したり、Parallel goを使用したりする場合は、単なる提案です:)
上記の回答を組み合わせて、作成されるスレッドの最大数に制限を追加するには、このオーバーロードされた呼び出しを使用できます。必ず「usingSystem.Threading.Tasks;」を追加してください。頂点で。
LinkedList<String> theList = new LinkedList<string>();
ParallelOptions parOptions = new ParallelOptions();
parOptions.MaxDegreeOfParallelism = 5; //only up to 5 threads allowed.
Parallel.ForEach(theList.AsEnumerable(), parOptions , (string CASE) =>
{
//bunch of code here
});