共用方式為


ThreadPool.SetMinThreads(Int32, Int32) 方法

定義

在切換至管理執行緒建立和解構的演算法之前,設定執行緒集區隨著提出新要求,視需要建立的執行緒最小數目。

public:
 static bool SetMinThreads(int workerThreads, int completionPortThreads);
public static bool SetMinThreads (int workerThreads, int completionPortThreads);
static member SetMinThreads : int * int -> bool
Public Shared Function SetMinThreads (workerThreads As Integer, completionPortThreads As Integer) As Boolean

參數

workerThreads
Int32

執行緒集區視需要建立的背景工作執行緒最小數目。

completionPortThreads
Int32

執行緒集區視需要建立的非同步 I/O 執行緒最小數目。

傳回

如果變更成功,則為 true;否則為 false

範例

下列範例會將背景工作線程數目下限設定為四個,並保留異步 I/O 完成線程數目下限的原始值。

using namespace System;
using namespace System::Threading;
int main()
{
   int minWorker;
   int minIOC;
   
   // Get the current settings.
   ThreadPool::GetMinThreads( minWorker, minIOC );
   
   // Change the minimum number of worker threads to four, but
   // keep the old setting for minimum asynchronous I/O
   // completion threads.
   if ( ThreadPool::SetMinThreads( 4, minIOC ) )
   {
      
      // The minimum number of threads was set successfully.
   }
   else
   {
      
      // The minimum number of threads was not changed.
   }
}
using System;
using System.Threading;

public class Test
{
    public static void Main()
    {
        int minWorker, minIOC;
        // Get the current settings.
        ThreadPool.GetMinThreads(out minWorker, out minIOC);
        // Change the minimum number of worker threads to four, but
        // keep the old setting for minimum asynchronous I/O 
        // completion threads.
        if (ThreadPool.SetMinThreads(4, minIOC))
        {
            // The minimum number of threads was set successfully.
        }
        else
        {
            // The minimum number of threads was not changed.
        }
    }
}
Imports System.Threading

Public Class Test

    <MTAThread> _
    Public Shared Sub Main()
        Dim minWorker, minIOC As Integer
        ' Get the current settings.
        ThreadPool.GetMinThreads(minWorker, minIOC)
        ' Change the minimum number of worker threads to four, but
        ' keep the old setting for minimum asynchronous I/O 
        ' completion threads.
        If ThreadPool.SetMinThreads(4, minIOC) Then
            ' The minimum number of threads was set successfully.
        Else
            ' The minimum number of threads was not changed.
        End If
    End Sub
End Class

備註

當 Windows 線程集區設定為使用而不是 .NET 線程集區時,不支援這個方法。 如需詳細資訊,請參閱 Windows 線程集區組態設定

線程集區會視需要提供新的背景工作線程或 I/O 完成線程,直到達到每個類別的最小值為止。 達到最小值時,線程集區可以在該類別中建立其他線程,或等到某些工作完成為止。 從 .NET Framework 4 開始,線程集區會建立和終結線程,以優化輸送量,定義為每個單位時間完成的工作數目。 執行緒太少可能無法最有效地利用可用資源,而執行緒太多則可能增加資源爭用的情況。

當需求很低時,執行緒集區執行緒的實際數目可能低於最小值。

如果您指定負數或大於使用中線程集區線程數目上限的數位, (使用 GetMaxThreads) 取得, SetMinThreads 則會 false 傳回 ,而且不會變更其中一個最小值。

根據預設,線程數目下限會設定為處理器計數。 您可以使用 SetMinThreads 來增加線程數目下限,例如暫時解決某些佇列工作專案或工作封鎖線程集區線程的問題。 這些封鎖有時會造成所有背景工作角色或 I/O 完成線程遭到封鎖的情況, (耗盡) 。 不過,增加線程數目下限可能會以其他方式降低效能,例如:

  • 線程集區可能會排程更多背景工作線程,即使背景工作線程未遭到封鎖亦然。 過度訂閱可能會導致排程輸出的線程在等候較長佇列以取得另一個時間配量時大幅延遲,並延遲某些工作專案或工作。
  • 背景工作線程可能需要更多CPU時間來清除佇列工作專案,因為必須掃描更多線程來竊取工作。
  • 線程之間的內容切換可能會增加CPU使用量。
  • 垃圾收集在線程堆疊逐步執行中可能需要更多CPU時間。
  • 進程可能會耗用更多記憶體。

警告

SetMinThreads使用 方法來增加線程數目下限可能會導致效能問題,如上述文字所述。 在大部分情況下,線程集區會使用自己的演算法來配置線程,以更妥善地執行。 將最小數目減少到小於處理器數目也可能會降低效能。

適用於

另請參閱