我已经写了几个月的“线性”winforms,现在我正在尝试找出线程。
这是我的循环,它有大约 40,000 行,在这一行上执行任务大约需要 1 秒:
foreach (String CASE in MAIN_CASES_LIST)
{
//bunch of code here
}
我如何能
- 将每个循环放入单独的线程中
- 同时维护不超过x个线程
我已经写了几个月的“线性”winforms,现在我正在尝试找出线程。
这是我的循环,它有大约 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
});
要混合上述答案,并为创建的最大线程数添加限制,您可以使用此重载调用。只需确保添加“使用 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
});
有一个很棒的库叫做 SmartThreadPool 在这里可能很有用,它用线程和队列做了很多有用的东西,从你那里抽象出大部分
不确定它是否会对您有所帮助,但您可以将大量工作项排队,限制线程数等
http://www.codeproject.com/Articles/7933/Smart-Thread-Pool
当然,如果你想用多线程弄脏你的手或使用 Parallel 去尝试它,这只是一个建议:)