Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk a .NET-beli szálkezelés konfigurálásához használható beállításokat ismerteti.
Az összes CPU-csoport használata Windows rendszeren
- A több PROCESSZORcsoportot tartalmazó gépeken ez a beállítás konfigurálja, hogy az olyan összetevők, mint a szálkészlet, az összes CPU-csoportot vagy csak a folyamat elsődleges CPU-csoportját használják-e. A beállítás a visszaadott értékre is hatással van Environment.ProcessorCount .
- Ha ez a beállítás engedélyezve van, a rendszer minden CPU-csoportot használ, és alapértelmezés szerint a szálak is automatikusan el vannak osztva a processzorcsoportok között .
- Ez a beállítás alapértelmezés szerint engedélyezve van a Windows 11 és újabb verziókban, és alapértelmezés szerint le van tiltva a Windows 10-ben és a korábbi verziókban. Ahhoz, hogy ez a beállítás engedélyezve legyen, a csoportházirend-objektumot is konfigurálni kell az összes CPU-csoport használatára; további információ: GC CPU-csoportok.
| Név beállítása | Értékek | |
|---|---|---|
| runtimeconfig.json | N/A | N/A |
| Környezeti változó | DOTNET_Thread_UseAllCpuGroups |
0 -fogyatékos1 -Engedélyezve |
Szálak hozzárendelése CPU-csoportokhoz Windows rendszeren
- A több CPU-csoportokkal rendelkező és az összes CPU-csoportot használó gépeken ez a beállítás konfigurálja, hogy a szálak automatikusan el legyenek-e osztva a processzorcsoportok között.
- Ha ez a beállítás engedélyezve van, a rendszer úgy rendel hozzá új szálakat egy CPU-csoporthoz, hogy az új CPU-csoport használata előtt teljesen feltöltse a már használatban lévő processzorcsoportot.
- Ez a beállítás alapértelmezés szerint engedélyezve van.
| Név beállítása | Értékek | |
|---|---|---|
| runtimeconfig.json | N/A | N/A |
| Környezeti változó | DOTNET_Thread_AssignCpuGroups |
0 -fogyatékos1 -Engedélyezve |
Minimális szálak
- Megadja a feldolgozói szálkészlet szálainak minimális számát.
- Megfelel a metódusnak ThreadPool.SetMinThreads .
| Név beállítása | Értékek | |
|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.MinThreads |
Egy egész szám, amely a szálak minimális számát jelöli |
| MSBuild tulajdonság | ThreadPoolMinThreads |
Egy egész szám, amely a szálak minimális számát jelöli |
| Környezeti változó | N/A | N/A |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.MinThreads": 4
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.Threading.ThreadPool.MinThreads": 4
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ThreadPoolMinThreads>4</ThreadPoolMinThreads>
</PropertyGroup>
</Project>
Szálak maximális száma
- A feldolgozói szálkészlet szálainak maximális számát adja meg.
- Megfelel a metódusnak ThreadPool.SetMaxThreads .
| Név beállítása | Értékek | |
|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.MaxThreads |
Egy egész szám, amely a szálak maximális számát jelöli |
| MSBuild tulajdonság | ThreadPoolMaxThreads |
Egy egész szám, amely a szálak maximális számát jelöli |
| Környezeti változó | N/A | N/A |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.MaxThreads": 20
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.Threading.ThreadPool.MaxThreads": 20
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ThreadPoolMaxThreads>20</ThreadPoolMaxThreads>
</PropertyGroup>
</Project>
Windows-szálkészlet
- Windows-projektek esetén konfigurálja, hogy a szálkészlet szálkezelése delegálva legyen-e a Windows-szálkészletbe.
- Ha kihagyja ezt a beállítást, vagy a platform nem Windows, a rendszer a .NET-szálkészletet használja helyette.
- Alapértelmezés szerint csak a Windows natív AOT-jával közzétett alkalmazások használják a Windows-szálkészletet, amelyhez a .NET-szálkészletet használhatja a konfigurációs beállítás letiltásával.
- A Windows-szálkészlet bizonyos esetekben jobban teljesíthet, például olyan esetekben, amikor a szálak minimális száma magas értékre van konfigurálva, vagy ha az alkalmazás már használja a Windows-szálkészletet. Előfordulhatnak olyan esetek is, amikor a .NET-szálkészlet jobban teljesít, például nagyobb gépeken nagy I/O-kezelés esetén. A konfigurációs beállítás módosításakor célszerű ellenőrizni a teljesítménymetrikákat.
- Egyes API-k nem támogatottak a Windows-szálkészlet használata esetén, például ThreadPool.SetMinThreads: , ThreadPool.SetMaxThreadsés ThreadPool.BindHandle(SafeHandle). A szálkészlet minimális és maximális szálbeállításai szintén nem hatékonyak. A másik lehetőség az ThreadPool.BindHandle(SafeHandle)ThreadPoolBoundHandle osztály.
| Név beállítása | Értékek | Bevezetett verzió | |
|---|---|---|---|
| runtimeconfig.json | System.Threading.ThreadPool.UseWindowsThreadPool |
true -Engedélyezvefalse -fogyatékos |
.NET 8 |
| MSBuild tulajdonság | UseWindowsThreadPool |
true -Engedélyezvefalse -fogyatékos |
.NET 8 |
| Környezeti változó | DOTNET_ThreadPool_UseWindowsThreadPool |
1 -Engedélyezve0 -fogyatékos |
.NET 8 |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.UseWindowsThreadPool": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.Threading.ThreadPool.UseWindowsThreadPool": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<UseWindowsThreadPool>true</UseWindowsThreadPool>
</PropertyGroup>
</Project>
Szálinjektálás a munkaelemek blokkolására válaszul
Bizonyos esetekben a szálkészlet észleli azokat a munkaelemeket, amelyek blokkolják a szálakat. A kompenzálás érdekében több szálat injektál. A .NET 6+-ban a következő futtatókörnyezeti konfigurációs beállítások használatával konfigurálhatja a szálinjektálást a munkaelemek blokkolására válaszul. Ezek a beállítások jelenleg csak azokra a munkaelemekre lépnek érvénybe, amelyek egy másik tevékenység befejezésére várnak, például a tipikus szinkronizálási aszinkron esetekben.
| runtimeconfig.json beállítás neve | Description | Bevezetett verzió |
|---|---|---|
System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor |
A szálszám MinThreads elérése után ez az érték (miután megszorozza a processzorok számával) meghatározza, hogy hány további szál hozható létre késedelem nélkül. |
.NET 6 |
System.Threading.ThreadPool.Blocking.ThreadsPerDelayStep_ProcCountFactor |
A szálszám ThreadsToAddWithoutDelay elérése után ez az érték (miután megszorozza a processzorok számával) azt határozza meg, hogy hány szálat adna hozzá a DelayStepMs késéshez az egyes új szálak létrehozása előtt. |
.NET 6 |
System.Threading.ThreadPool.Blocking.DelayStepMs |
A szálszám ThreadsToAddWithoutDelay elérése után ez az érték határozza meg, hogy mennyi további késleltetést kell hozzáadni szálonként ThreadsPerDelayStep , amelyet minden új szál létrehozása előtt alkalmazna. |
.NET 6 |
System.Threading.ThreadPool.Blocking.MaxDelayMs |
A szálszám ThreadsToAddWithoutDelay elérése után ez az érték határozza meg az egyes új szálak létrehozása előtt használandó maximális késleltetést. |
.NET 6 |
System.Threading.ThreadPool.Blocking.IgnoreMemoryUsage |
Alapértelmezés szerint a blokkolásra válaszul a szálinjektálás sebességét heurisztikusok korlátozzák, amelyek meghatározzák, hogy elegendő fizikai memória áll-e rendelkezésre. Bizonyos helyzetekben célszerűbb lehet a szálakat még alacsony memóriaigényű helyzetekben is gyorsabban injektálni. A kapcsoló kikapcsolásával letilthatja a memóriahasználat heurisztikus beállításait. | .NET 7 |
A konfigurációs beállítások érvénybe lépése
- A szálszám
MinThreadselérése után legfeljebbThreadsToAddWithoutDelaytovábbi szálak hozhatók létre késedelem nélkül. - Ezután minden további szál létrehozása előtt a rendszer késleltetést indukál, kezdve a következővel
DelayStepMs: . - A késéssel hozzáadott szálak
ThreadsPerDelayStepesetében a rendszer továbbiDelayStepMselemet ad hozzá a késéshez. - A késés nem haladhatja meg a következőt
MaxDelayMs: . - A késések csak a szálak létrehozása előtt következnek be. Ha a szálak már elérhetők, akkor a munkaelemek blokkolásának kompenzálása érdekében a rendszer haladéktalanul kiadja őket.
- A fizikai memóriahasználatot és a korlátokat is használják, és a küszöbértéken túl a rendszer lassabb menetinjektálásra vált.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.Threading.ThreadPool.Blocking.ThreadsToAddWithoutDelay_ProcCountFactor": 5
}
}
AutoreleasePool felügyelt szálak esetén
Ez a beállítás konfigurálja, hogy minden felügyelt szál kap-e implicit NSAutoreleasePool-t , amikor támogatott macOS-platformon fut.
| Név beállítása | Értékek | Bevezetett verzió | |
|---|---|---|---|
| runtimeconfig.json | System.Threading.Thread.EnableAutoreleasePool |
true vagy false |
.NET 6 |
| MSBuild tulajdonság | AutoreleasePoolSupport |
true vagy false |
.NET 6 |
| Környezeti változó | N/A | N/A | N/A |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.Threading.Thread.EnableAutoreleasePool": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.Threading.Thread.EnableAutoreleasePool": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AutoreleasePoolSupport>true</AutoreleasePoolSupport>
</PropertyGroup>
</Project>