簡體   English   中英

我應該在什么時間和上下文中調用ThreadPool.SetMinThreads

[英]At which time and in which context should I call ThreadPool.SetMinThreads

我有一個ASP .NET MVC 2應用程序,該應用程序調用C#-DLL的函數。

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

我使用異步委托來生成線程。 為了加快委托的初始化,我預先計算了所需的線程數,並將其提供給ThreadPool:

ThreadPool.SetMinThreads(my_num_threads, ...); 

我只是想知道,是否需要足夠早地這樣做,以便ThreadPool有足夠的時間創建線程? 設置ThreadPool的大小是否需要考慮,還是在調用SetMinThreads之后立即可用的線程?

此外,如果我在ASP .NET MVC應用程序中將DLL的大小設置為超出DLL的大小(在調用DLL之前),則該設置對DLL可用/可見嗎?

它們共享相同的應用程序域,因此在任何地方設置ThreadPool都會影響全部。 請注意,這也會影響ASP.NET框架,該框架會將ThreadPool本身用於所有其自己的異步任務等。

考慮到這一點,如果您大致了解所需的最小線程數,則可以在應用程序啟動時進行設置,以備后用。

但是,要使用200個線程似乎有些多余,要將其打開,大約8個選項卡打開的Chrome使用35個線程,而使用SQL Server則大約50個線程。 您在做什么呢?

還應意識到,最終將達到性能下降的極限,因為必須服務的線程太多。 微軟在MSDN上這樣說:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM