2012-11-29 85 views
1

我正在使用奇妙的SmartThreadPool來排隊一堆解析任務。Smartthreadpool - 在線程排隊時很慢

所以基本上會發生的是,當用戶點擊按鈕開始時,程序將循環通過不同的列表,並基於這些列表將啓動不同的工作(注:這可能是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

你需要在UI線程上排隊的任何原因? – igrimpe

回答

1

您可以使用其中一個線程排列作業。只需將foreach移至一個單獨的方法並將其排列在主線程中即可。這足以並行排隊,當它完成時,其線程也將被SmartThreadPool回收並用於排隊作業。

+0

在閱讀你的答案後,我把排隊方法放入了一個背景工作 - 它工作的很完美! :) 萬分感謝!! – Jacqueline