0

私は2、3か月間「線形」のウィンフォームを作成してきましたが、今はスレッド化を理解しようとしています。

これは約40,000行の私のループであり、この行でタスクを実行するのに約1秒かかります。

foreach (String CASE in MAIN_CASES_LIST)
{
//bunch of code here
}

どうすればいいですか

  1. 各ループを別々のスレッドに入れます
  2. 同時にx個以下のスレッドを維持する
4

3 に答える 3

2

.NET 4を使用している場合は、Parallel.ForEachを利用できます。

Parallel.ForEach(MAIN_CASES_LIST, CASE => 
{ 

    //bunch of code here 

});
于 2012-06-22T21:37:22.713 に答える
1

ここで役立つかもしれないSmartThreadPoolと呼ばれる素晴らしいライブラリがあります。それはスレッド化とキューイングで多くの有用なことを行い、これらのほとんどをあなたから抽象化します

それが役立つかどうかはわかりませんが、大量の作業項目をキューに入れたり、スレッドの数を制限したりすることができます。

http://www.codeproject.com/Articles/7933/Smart-Thread-Pool

もちろん、マルチスレッドで手を汚したり、Parallel goを使用したりする場合は、単なる提案です:)

于 2012-06-22T21:41:40.280 に答える
1

上記の回答を組み合わせて、作成されるスレッドの最大数に制限を追加するには、このオーバーロードされた呼び出しを使用できます。必ず「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 

});
于 2012-06-22T23:35:30.617 に答える