2009-08-18 41 views

回答

9

你應該小心改變線程池的大小。只有一個固定系統線程池,用於各種事物。如果太小,可能會導致您甚至不認爲自己正在使用的區域出現問題。

如果你想有一個特定的任務相對較少的線程池,你應該使用一個單獨的游泳池。有各種各樣的第三方池 - 我有一個相當老的作爲MiscUtil的一部分,但它對於簡單用例應該足夠好。如果你看,我相信你可以找到更先進的。

這是不幸的,沒有在框架中的實例化ThreadPool呢。我不記得是否並行擴展會有效提供一個,但我不認爲它會。

+0

.NET 4.0中的並行擴展實際上將使用基類庫中的標準ThreadPool。他們不會提供他們自己的。 (BCL的ThreadPool類在.NET 4中進行了改進,增加了許多功能,使得並行擴展能夠高效地工作,這反過來又在很多方面改進了它,例如,它比.NET 3.5有更好的調度器ThreadPool) – 2009-08-18 18:12:28

+0

@Reed:是的,我知道使用系統線程池的PFX的正常位...我不確定是否有新的可以創建。呃,好吧。 – 2009-08-18 18:45:27

4
ThreadPool.SetMaxThreads() 
+0

有沒有另外一種非靜態的方法?這不會使所有的ThreadPools的大小 - 我只想要一個ThreadPool的實例具有特定的大小。 – DLauer 2009-08-18 16:09:08

+2

每個進程只有一個BCL ThreadPool。如果你只想要一個線程池,你必須找到第三方庫。 – 2009-08-18 16:10:22

+0

它可能值得注意的是,你不能在運行時1.1中做到這一點。當然,線程中的異常可能導致1.1中的內存損壞,所以如果可能的話,你不應該使用它。 – quillbreaker 2009-08-18 17:12:41

0

ThreadPool.SetMaxThreads(5,5)然後超過五個線程的任何東西都會排隊。

0

你想要ThreadPool.SetMaxThreads()方法。

4

您可以使用ThreadPool.SetMinThreadsThreadPool.SetMaxThreads來控制線程池中的線程數。

這就是說,我建議謹慎使用它。由於BCL中的許多操作都依賴於線程池線程,所以很容易讓自己陷入麻煩。

相關問題