2011-09-15 30 views
1

可能重複:
Advantage of using Thread.Start vs QueueUserWorkItem使用ThreadPool.QueueUserWorkItem和使用System.Thread有什麼區別?

如果我想通過一個線程來執行的方法,所以我通常使用System.Thread這樣

Thread th = new Thread(Test_Progress); 
th.Start(); 

,但我的同事告訴我使用如下的ThreadPool.QueueUserWorkItem更好

ThreadPool.QueueUserWorkItem(new WaitCallback(Test_Progress),(object)true); 

所以有沒有像性能和它如何處理?

+2

這可能會有所幫助:http://stackoverflow.com/questions/684640/advantage-of-using-thread-start-vs-queueuserworkitem – codefrenzy

回答

2

ThreadPool是線程池(集合),並使用它將從該池中選擇一個線程,並在線程對象創建新線程的同時在該線程中執行您的方法。 這是圍繞對象池的一般概念,即當您的應用程序中需要使用多個對象時,一個選項是創建這些對象的池並從該池中選取對象,然後將其放回池中,然後將其放回池中對象創建昂貴並且這也導致更好的可伸縮性的情況。在線程的情況下,如果您的應用程序創建了許多線程,那麼由於上下文切換,它將非常緩慢地爬行,因此它最好使用線程池。另一個同樣概念的例子是SQL連接池。

+0

好的,終止線程的方式是由應用程序以相同的方式處理? –

+1

不,在線程池中,您不會終止線程,只要您傳遞的委託返回線程,就會返回到線程池。線程池管理線程和相關操作的責任 – Ankur

+1

@Sara如果通過「終止」你的意思是「Thread.Abort()」,你不應該終止一個線程。如果你的意思是「當胎面結束工作時會發生什麼」,那麼Ankur的反應是完美的。 – xanatos

3

線程是昂貴的創建對象,使用線程池是在獨立線程上執行快速工作的更好方式,無需處理創建新線程的全部成本。

此外,您要確保您不在池線程上執行非常長的執行操作,因爲您可以耗盡池的有限數量的線程。

你應該閱讀MSDN文檔關於位於這裏的線程池:http://msdn.microsoft.com/en-us/library/0ka9477y.aspx

這將解釋一些事情要決定使用什麼時候要記住。

+0

謝謝瑞恩,實際上我用它來保存一系列圖像,所以我想這是一個漫長的操作,不是嗎? –

1

如果您有很多短時間運行任務,請使用線程池。如果你只有少量和長時間運行的任務,線程的使用效果會更好。

線程的使用使您能夠更好地控制任務,相比之下,使用踏步池可以使事情更輕鬆。

相關問題