我有一個應用程序,我有很多「搜索」在同一時間運行(在搜索需要1 - 10秒才能完成,這取決於有多少結果是可用的)問題是,搜索時的延遲越來越大(我認爲,因爲25最大線程)我使用Backgroundworker類Atm。於是我查閱了一些其他的實現:線程最好的實現
簡單的例子:
static void Main()
{
for (int i = 0; i < 500; i++)
{
try
{
new Thread(new ParameterizedThreadStart(doWork)).Start(i);
}
catch { }
}
Console.ReadLine();
}
static void doWork(object i)
{
Console.WriteLine(i + ": started");
Thread.Sleep(1000);
Console.WriteLine(i + " done");
Thread.CurrentThread.Abort();
}
,但我得到的是我中止線程中的異常(至極讓我擔心) 所以,我想蒙山線程池:
static void Main()
{
for (int i = 0; i < 500; i++)
{
ThreadPool.QueueUserWorkItem(new WaitCallback(doWork), i);
}
Console.ReadLine();
}
static void doWork(object i)
{
Console.WriteLine(i + ": started");
Thread.Sleep(1000);
Console.WriteLine(i + " done");
}
但是這變得味道很慢...
我仍然在尋找最佳實施,任何人都可以幫助我嗎?
編輯:DoWork的方法建立網絡連接(並等待它完成)這是一個API,所以我不能做異步
你爲什麼中止線程? 500線程永遠不是一個好主意 – 2012-02-19 11:44:00
你爲什麼中止線程?一旦達到doWork的最後,線程也會死亡。 – 2012-02-19 11:45:59
這些線程在做什麼?他們是CPU綁定,還是IO綁定?如果他們是IO綁定,請考慮使用非阻塞IO,而不是每個搜索都有一個線程。 – CodesInChaos 2012-02-19 11:56:54