2012-11-08 86 views
0

我有一個ASP .NET MVC 2-應用程序,它調用C#-DLL的函數。我應該在哪個時間和哪個上下文中調用ThreadPool.SetMinThreads

DLL本身是多線程的。在最糟糕的情況下,它最多使用200個線程,這些線程運行時間不長。

我使用異步委託來生成線程。爲了加快了代表們的初始化,我計算的線程數,我需要提前給它的線程池:

ThreadPool.SetMinThreads(my_num_threads, ...); 

我會想,如果我需要做早期,足量,使得ThreadPool有足夠的時間來創建線程?我必須考慮,我設置了ThreadPool的大小還是在我調用SetMinThreads後立即可用的線程?此外,如果我在我的ASP .NET MVC-應用程序(在我調用DLL之前)中設置DLL的外部大小,該設置對於DLL是可用/可見的嗎?

回答

1

它們共享相同的應用程序域,以便將ThreadPool設置到任何位置都會影響所有域。請注意,這也會影響ASP.NET框架,它將使用ThreadPool本身來執行所有自己的異步任務等。

考慮到這一點,如果您大致知道所需的最小線程數,則可以在應用程序啓動準備好以後使用。

但是,200個線程似乎有點過分,爲了將它放到上下文中,我的Chrome大約8個標籤打開使用約35和我的SQL Server〜50。你在做什麼要求這麼多?

也意識到,最終你會達到一個極限,性能會降低,因爲有太多的線程必須提供服務。微軟在MSDN上說:

您可以使用SetMinThreads方法來增加最小線程數。但是,不必要地增加這些值可能會導致性能問題。如果太多的任務在同一時間開始,所有這些任務似乎都很慢。在大多數情況下,線程池會使用自己的算法分配線程,從而獲得更好的性能。將最小值減小到小於處理器數量也會損害性能。

相關問題