Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek podrobně popisuje nastavení, která můžete použít ke konfiguraci podprocesů v .NET.
Použití všech skupin procesoru ve Windows
- Na počítačích s více skupinami procesoru toto nastavení konfiguruje, jestli komponenty, jako je fond vláken, používají všechny skupiny procesoru nebo pouze primární skupinu procesoru procesu. Nastavení také ovlivňuje, co Environment.ProcessorCount se vrátí.
- Pokud je toto nastavení povolené, použijí se všechny skupiny procesoru a vlákna se automaticky distribuují také mezi skupiny procesoru .
- Toto nastavení je ve výchozím nastavení povolené ve Windows 11 a novějších verzích a ve výchozím nastavení je zakázané ve Windows 10 a starších verzích. Aby se toto nastavení projevilo, pokud je povoleno, musí být uvolňování paměti také nakonfigurováno tak, aby používalo všechny skupiny procesoru; Další informace naleznete v tématu Skupiny procesoru uvolňování paměti.
| Název položky nastavení | Hodnoty | |
|---|---|---|
| runtimeconfig.json | N/A | N/A |
| Proměnná prostředí | DOTNET_Thread_UseAllCpuGroups |
0 -invalidní1 -zpřístupněný |
Přiřazení vláken ke skupinám procesoru ve Windows
- Na počítačích s více skupinami procesoru a všechny skupiny procesorů se toto nastavení konfiguruje, jestli se vlákna automaticky distribuují napříč skupinami procesoru.
- Pokud je toto nastavení povolené, přiřadí se nová vlákna ke skupině procesoru způsobem, který se pokusí plně naplnit skupinu procesoru, která je již používána před použitím nové skupiny procesoru.
- Toto nastavení je standardně zapnuté.
| Název položky nastavení | Hodnoty | |
|---|---|---|
| runtimeconfig.json | N/A | N/A |
| Proměnná prostředí | DOTNET_Thread_AssignCpuGroups |
0 -invalidní1 -zpřístupněný |
Minimální počet vláken
- Určuje minimální počet vláken pro fond pracovních vláken.
- ThreadPool.SetMinThreads Odpovídá metodě.
| Název položky nastavení | Hodnoty | |
|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.MinThreads |
Celé číslo představující minimální počet vláken |
| Vlastnost MSBuild | ThreadPoolMinThreads |
Celé číslo představující minimální počet vláken |
| Proměnná prostředí | N/A | N/A |
Examples
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.MinThreads": 4
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.Threading.ThreadPool.MinThreads": 4
}
}
Soubor projektu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>
</Project>
Maximální počet vláken
- Určuje maximální počet vláken pro fond pracovních vláken.
- ThreadPool.SetMaxThreads Odpovídá metodě.
| Název položky nastavení | Hodnoty | |
|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.MaxThreads |
Celé číslo představující maximální počet vláken |
| Vlastnost MSBuild | ThreadPoolMaxThreads |
Celé číslo představující maximální počet vláken |
| Proměnná prostředí | N/A | N/A |
Examples
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.MaxThreads": 20
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.Threading.ThreadPool.MaxThreads": 20
}
}
Soubor projektu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>
</Project>
Fond vláken Windows
- U projektů ve Windows konfiguruje, zda je správa vláken fondu vláken delegována do fondu vláken Systému Windows.
- Pokud toto nastavení vynecháte nebo platforma není Windows, použije se místo toho fond vláken .NET.
- Ve výchozím nastavení používají fond vláken Systému Windows publikované pouze aplikace publikované s nativní AOT ve Windows, pro které se místo toho můžete rozhodnout použít fond vláken .NET zakázáním nastavení konfigurace.
- Fond vláken Windows může v některých případech fungovat lépe, například v případech, kdy je minimální počet vláken nakonfigurovaný na vysokou hodnotu nebo když fond vláken Windows už aplikaci silně využívá. V případech, kdy fond vláken .NET funguje lépe, například při náročném zpracování vstupně-výstupních operací na větších počítačích. Při změně tohoto nastavení konfigurace doporučujeme zkontrolovat metriky výkonu.
- Některá rozhraní API nejsou podporována při použití fondu vláken systému Windows, například ThreadPool.SetMinThreads, ThreadPool.SetMaxThreadsa ThreadPool.BindHandle(SafeHandle). Nastavení konfigurace fonduvlákench Alternativou ThreadPool.BindHandle(SafeHandle)ThreadPoolBoundHandle je třída.
| Název položky nastavení | Hodnoty | Verze byla představena | |
|---|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.UseWindowsThreadPool |
true -zpřístupněnýfalse -invalidní |
.NET 8 |
| Vlastnost MSBuild | UseWindowsThreadPool |
true -zpřístupněnýfalse -invalidní |
.NET 8 |
| Proměnná prostředí | DOTNET_ThreadPool_UseWindowsThreadPool |
1 -zpřístupněný0 -invalidní |
.NET 8 |
Examples
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.UseWindowsThreadPool": true
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.Threading.ThreadPool.UseWindowsThreadPool": true
}
}
Soubor projektu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>
</Project>
Injektáž vlákna v reakci na blokování pracovních položek
V některých případech fond vláken detekuje pracovní položky, které blokují jeho vlákna. Aby se kompenzovala, vloží více vláken. V rozhraní .NET 6 nebo novějších můžete pomocí následujících nastavení konfigurace modulu runtime nakonfigurovat injektáž vlákna v reakci na blokování pracovních položek. V současné době se tato nastavení projeví jenom u pracovních položek, které čekají na dokončení jiného úkolu, například v typických asynchronních případech synchronizace .
| název nastaveníruntimeconfig.json | Description | Verze byla představena |
|---|---|---|
System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor |
Po dosažení počtu MinThreads vláken určuje tato hodnota (po vynásobení počtem procesorů), kolik dalších vláken může být vytvořeno bez zpoždění. |
.NET 6 |
System.Threading.ThreadPool.Blocking.ThreadsPerDelayStep_ProcCountFactor |
Po dosažení počtu ThreadsToAddWithoutDelay vláken určuje tato hodnota (po vynásobení počtem procesorů) po přidání dalších DelayStepMs vláken do zpoždění před vytvořením každého nového vlákna. |
.NET 6 |
System.Threading.ThreadPool.Blocking.DelayStepMs |
Po dosažení počtu vláken určuje ThreadsToAddWithoutDelay tato hodnota další zpoždění přidání na ThreadsPerDelayStep vlákna, které by se použilo před vytvořením každého nového vlákna. |
.NET 6 |
System.Threading.ThreadPool.Blocking.MaxDelayMs |
Po dosažení počtu ThreadsToAddWithoutDelay vláken určuje tato hodnota maximální prodlevu, která se má použít před vytvořením každého nového vlákna. |
.NET 6 |
System.Threading.ThreadPool.Blocking.IgnoreMemoryUsage |
Ve výchozím nastavení je míra injektáže vlákna v reakci na blokování omezena heuristiky, které určují, zda je k dispozici dostatek fyzické paměti. V některých situacích může být vhodnější vložit vlákna rychleji i v situacích s nedostatkem paměti. Heuristika využití paměti můžete zakázat vypnutím tohoto přepínače. | .NET 7 |
Jak se nastavení konfigurace projeví
- Po dosažení počtu
MinThreadsvláken je možné vytvořit ažThreadsToAddWithoutDelaydalší vlákna bez zpoždění. - Potom se před vytvořením každého dalšího vlákna vyvolá zpoždění počínaje
DelayStepMs. - Pro všechna
ThreadsPerDelayStepvlákna přidaná se zpožděním přidá dalšíDelayStepMs. - Zpoždění nesmí překročit
MaxDelayMs. - Zpoždění jsou vyvolána pouze před vytvořením vláken. Pokud už jsou vlákna dostupná, uvolní se bez zpoždění, aby se kompenzuje blokování pracovních položek.
- Používají se také fyzické využití a limity fyzické paměti a systém se přepne na pomalejší injektáž vláken.
Examples
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
}
}
AutoreleasePool pro spravovaná vlákna
Tato možnost konfiguruje, jestli každé spravované vlákno obdrží implicitní NSAutoreleasePool při spuštění na podporované platformě macOS.
| Název položky nastavení | Hodnoty | Verze byla představena | |
|---|---|---|---|
| runtimeconfig.json | System.Threading.Thread.EnableAutoreleasePool |
true nebo false |
.NET 6 |
| Vlastnost MSBuild | AutoreleasePoolSupport |
true nebo false |
.NET 6 |
| Proměnná prostředí | N/A | N/A | N/A |
Examples
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.Thread.EnableAutoreleasePool": true
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.Threading.Thread.EnableAutoreleasePool": true
}
}
Soubor projektu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>
</Project>