Smartthreadpool - 排队大量线程时速度慢

时间:2012-11-29 09:52:50

标签: c# multithreading threadpool

我正在使用精彩的SmartThreadPool来排队一堆解析任务。

基本上,当用户点击按钮Start时,程序将循环遍历不同的列表,并根据这些列表启动不同的作业(注意:这可能是500.000个作业)。

我正在排队:

 private void button1_Click(object sender, EventArgs e)
 {
     button1.Enabled = false;
     button2.Enabled = true;

     stpStartInfo.MaxWorkerThreads = Convert.ToInt32(parserThreadCount.Value);
     stpStartInfo.MinWorkerThreads = 1;
     _smartThreadPool2 = new Smart.SmartThreadPool(stpStartInfo);

     ........

     foreach (string engine in _checkedEngines)
     {
         query = lines[i];

         _smartThreadPool2.QueueWorkItem(
         new Amib.Threading.Func<string, string, int, int, int>(scrapeFunction),
         query, engine, iia, useProxies);

         iia++;
     }
}

所以问题是用户在排队等待200.000+个线程时必须等待(接口几乎挂起)..

理想的解决方案是让一个已经排队的线程开始,然后在后台排队其余的方法..但不知道我怎么能做到这一点..

有什么想法吗? :)

1 个答案:

答案 0 :(得分:1)

您可以使用其中一个线程对作业进行排队。只需将foreach移动到一个单独的方法并将其排入主线程。这足以同时进行排队,当它完成时,它的线程也将被SmartThreadPool回收并用于排队的作业。