0

我已经写了几个月的“线性”winforms,现在我正在尝试找出线程。

这是我的循环,它有大约 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

要混合上述答案,并为创建的最大线程数添加限制,您可以使用此重载调用。只需确保添加“使用 System.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 回答
1

有一个很棒的库叫做 SmartThreadPool 在这里可能很有用,它用线程和队列做了很多有用的东西,从你那里抽象出大部分

不确定它是否会对您有所帮助,但您可以将大量工作项排队,限制线程数等

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

当然,如果你想用多线程弄脏你的手或使用 Parallel 去尝试它,这只是一个建议:)

于 2012-06-22T21:41:40.280 回答