ThreadPool.SetMinThreads(Int32, Int32) Methode

Definitie

Hiermee stelt u het minimale aantal threads in dat de threadgroep op aanvraag maakt, terwijl er nieuwe aanvragen worden gedaan, voordat u overschakelt naar een algoritme voor het beheren van het maken en vernietigen van threads.

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

Parameters

workerThreads
Int32

Het minimale aantal werkrolthreads dat door de threadgroep op aanvraag wordt gemaakt.

completionPortThreads
Int32

Het minimale aantal asynchrone I/O-threads dat door de threadpool op aanvraag wordt gemaakt.

Retouren

true als de wijziging is geslaagd; anders, false.

Voorbeelden

In het volgende voorbeeld wordt het minimum aantal werkthreads ingesteld op vier en blijft de oorspronkelijke waarde behouden voor het minimale aantal asynchrone I/O-voltooiingsthreads.

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

Opmerkingen

Deze methode wordt niet ondersteund wanneer de Windows threadgroep is geconfigureerd voor gebruik in plaats van de .NET threadgroep. Zie de configuratie-instelling voor Windows threadpool voor meer informatie.

De threadgroep biedt nieuwe werkthreads of I/O-voltooiingsthreads op aanvraag totdat deze het minimum voor elke categorie bereikt. Wanneer het minimum is bereikt, kan de threadgroep extra threads in die categorie maken of wachten totdat bepaalde taken zijn voltooid. Vanaf het .NET Framework 4 maakt en vernietigt de threadgroep threads om de doorvoer te optimaliseren. Dit wordt gedefinieerd als het aantal taken dat per tijdseenheid wordt voltooid. Te weinig threads maken mogelijk niet optimaal gebruik van beschikbare resources, terwijl er te veel threads kunnen leiden tot conflicten tussen resources.

Wanneer de vraag laag is, kan het werkelijke aantal threadpool-threads onder de minimaal vereiste waarden vallen.

Als u een negatief getal of een getal opgeeft dat groter is dan het maximum aantal actieve threadpoolthreads (verkregen met behulp GetMaxThreads), SetMinThreads retourneert en wijzigt false geen van de minimumwaarden.

Standaard is het minimum aantal threads ingesteld op het aantal processoren. U kunt het SetMinThreads minimale aantal threads verhogen, bijvoorbeeld om problemen tijdelijk te omzeilen waarbij bepaalde werkitems in de wachtrij of taken threadgroepthreads blokkeren. Deze obstakels leiden soms tot een situatie waarbij alle werkrol- of I/O-voltooiingsthreads worden geblokkeerd (verhongering). Het verhogen van het minimale aantal threads kan de prestaties echter op andere manieren verminderen, zoals:

  • De threadgroep kan meer werkthreads plannen, zelfs als de werkrolthreads niet worden geblokkeerd. De oversubscriptie kan ertoe leiden dat threads die worden gepland aanzienlijk worden vertraagd omdat ze in een lange wachtrij wachten om een ander tijdssegment te krijgen, waardoor bepaalde werkitems of taken worden vertraagd.
  • Werkthreads kunnen meer CPU-tijd in beslag nemen bij het verwijderen van werkitems omdat er meer threads moeten worden gescand om werk te stelen.
  • Het schakelen tussen threads tussen threads kan het CPU-gebruik verhogen.
  • Garbagecollection kan meer CPU-tijd in beslag nemen tijdens het lopen van threadstacks.
  • Het proces verbruikt mogelijk meer geheugen.

Caution

Door de SetMinThreads methode te gebruiken om het minimale aantal threads te verhogen, kunnen prestatieproblemen ontstaan, zoals beschreven in de voorgaande tekst. In de meeste gevallen presteert de threadgroep beter met een eigen algoritme voor het toewijzen van threads. Het verminderen van het minimum tot minder dan het aantal processors kan ook de prestaties schaden.

Van toepassing op

Zie ook