Futásidejű konfigurációs beállítások szemétgyűjtéshez
Ez a lap a .NET-futtatókörnyezeti szemétgyűjtő (GC) beállításaival kapcsolatos információkat tartalmaz. Ha egy futó alkalmazás csúcsteljesítményét szeretné elérni, fontolja meg ezeket a beállításokat. Az alapértelmezett értékek azonban optimális teljesítményt biztosítanak a legtöbb alkalmazás számára a tipikus helyzetekben.
A beállítások csoportokba vannak rendezve ezen a lapon. Az egyes csoportokon belüli beállításokat gyakran használják egymással együtt egy adott eredmény eléréséhez.
Feljegyzés
- Ezeket a konfigurációkat csak a futtatókörnyezet olvassa be, amikor a csoportházirend-objektum inicializálva van (ez általában a folyamat indítási ideje alatt jelent). Ha módosít egy környezeti változót, amikor egy folyamat már fut, a változás nem jelenik meg ebben a folyamatban. Ezen a lapon nem jelennek meg az API-k által futtatáskor módosítható beállítások, például a késési szint.
- Mivel a GC folyamatonkénti, ritkán van értelme ezeket a konfigurációkat gépszinten beállítani. Például nem szeretné, hogy egy gépen minden .NET-folyamat kiszolgálói GC-t vagy ugyanazt a korlátot használja.
- Számértékek esetén használjon decimális jelölést a runtimeconfig.json vagy runtimeconfig.template.json fájl beállításaihoz, valamint a környezeti változó beállításainak hexadecimális jelöléséhez. Hexadecimális értékek esetén megadhatja őket a "0x" előtaggal vagy anélkül.
- Ha a környezeti változókat használja, a .NET 6-os és újabb verziói ahelyett, hogy az előtagon
DOTNET_
szabványosítanákCOMPlus_
. AzCOMPlus_
előtag azonban továbbra is működni fog. Ha a .NET-futtatókörnyezet egy korábbi verzióját használja, akkor is használja példáulCOMPlus_gcServer
azCOMPlus_
előtagot.
A konfiguráció megadásának módjai
A .NET-futtatókörnyezet különböző verzióiban különböző módokon adhatók meg a konfigurációs értékek. Az alábbi táblázat egy összegzést tartalmaz.
Konfiguráció helye | .NET-verziók, amelyekre ez a hely vonatkozik | Formátumok | Hogyan értelmezik? |
---|---|---|---|
runtimeconfig.json fájl/ runtimeconfig.template.json fájl |
.NET (Core) | n | Az n decimális értékként van értelmezve. |
Környezeti változó | .NET-keretrendszer, .NET (Core) | 0xn vagy n | az n mindkét formátumban hexa értékként van értelmezve |
app.config fájl | .NET-keretrendszer | 0xn | n hatszögértékkéntvan értelmezve 1 |
1 Megadhat egy értéket az 0x
app.config fájlbeállítás előtagja nélkül, de ez nem ajánlott. A .NET-keretrendszer 4.8+-on hiba miatt az 0x
előtag nélkül megadott érték hexadecimálisként van értelmezve, de a .NET-keretrendszer korábbi verzióiban tizedes törtként értelmezik. A konfiguráció módosításának elkerülése érdekében használja az 0x
előtagot az app.config fájlban lévő érték megadásakor.
Ha például egy A.exe nevű .NET-keretrendszer-alkalmazáshozGCHeapCount
12 halomot szeretne megadni, adja hozzá a következő XML-fájlt a A.exe.config fájlhoz.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<runtime>
<gcServer enabled="true"/>
<GCHeapCount>0xc</GCHeapCount>
</runtime>
</configuration>
A .NET (Core) és a .NET-keretrendszer egyaránt használhat környezeti változókat.
Windows rendszeren .NET 6-os vagy újabb verzióval:
SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c
Windows rendszeren a .NET 5-ös vagy korábbi verziójával:
SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c
Egyéb operációs rendszereken:
.NET 6-os vagy újabb verziók esetén:
export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c
.NET 5 és korábbi verziók esetén:
export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c
Ha nem .NET-keretrendszer használ, a runtimeconfig.json vagy runtimeconfig.template.json fájlban is beállíthatja az értéket.
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
A szemétgyűjtés ízei
A szemétgyűjtés két fő íze a munkaállomás GC és a kiszolgálói GC. A kettő közötti különbségekről további információt a Munkaállomás és a kiszolgáló szemétgyűjtése című témakörben talál.
A szemétgyűjtés almappái háttérbeliek és nem egyidejűek.
A szemétgyűjtés ízeinek kiválasztásához használja az alábbi beállításokat:
Munkaállomás és kiszolgáló
- Konfigurálja, hogy az alkalmazás munkaállomás szemétgyűjtést vagy kiszolgálói szemétgyűjtést használ-e.
- Alapértelmezett: Munkaállomás szemétgyűjtése. Ez egyenértékű az érték
false
beállításával.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Server |
false -munkaállomástrue -kiszolgáló |
.NET Core 1.0 |
MSBuild tulajdonság | ServerGarbageCollection |
false -munkaállomástrue -kiszolgáló |
.NET Core 1.0 |
Környezeti változó | COMPlus_gcServer |
0 -munkaállomás1 -kiszolgáló |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcServer |
0 -munkaállomás1 -kiszolgáló |
.NET 6 |
app.config for .NET-keretrendszer | GCServer | false -munkaállomástrue -kiszolgáló |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Server": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
Háttérbeli GC
- Konfigurálja, hogy engedélyezve van-e a háttérbeli (egyidejű) szemétgyűjtés.
- Alapértelmezett: Háttérbeli csoportházirend-objektum használata. Ez egyenértékű az érték
true
beállításával. - További információ: Háttér szemétgyűjtés.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Concurrent |
true - háttérbeli GCfalse - nem egyidejű GC |
.NET Core 1.0 |
MSBuild tulajdonság | ConcurrentGarbageCollection |
true - háttérbeli GCfalse - nem egyidejű GC |
.NET Core 1.0 |
Környezeti változó | COMPlus_gcConcurrent |
1 - háttérbeli GC0 - nem egyidejű GC |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcConcurrent |
1 - háttérbeli GC0 - nem egyidejű GC |
.NET 6 |
app.config for .NET-keretrendszer | gcConcurrent | true - háttérbeli GCfalse - nem egyidejű GC |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Concurrent": false
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.Concurrent": false
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
</Project>
Erőforrás-használat kezelése
A szemétgyűjtő memóriájának és processzorhasználatának kezeléséhez használja az alábbi beállításokat:
- Affinitás
- Maszk affinitása
- Tartományok affinitása
- CPU-csoportok
- Halom száma
- Halom kemény korlátja
- Halom kemény korlát százalékos aránya
- Objektumonkénti halom kemény korlátai
- Objektumonkénti halom kemény korlát százalékos aránya
- Magas memóriaszázalék
- Virtuális gép megőrzése
Ezen beállítások némelyikével kapcsolatos további információkért lásd a munkaállomás és a kiszolgáló GC közötti középső terepet ismertető blogbejegyzést.
Halom száma
- Korlátozza a szemétgyűjtő által létrehozott halmok számát.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Ha a GC processzor affinitása engedélyezve van, ami az alapértelmezett érték, a halomszám beállítás affinitja
n
a GC-halomokat/szálakat az elsőn
processzorokhoz. (Az affinitás maszkjának vagy a tartományok affinitási beállításainak használatával pontosan megadhatja, hogy mely processzorokat szeretné affinitni.) - Ha a GC processzor affinitása le van tiltva, ez a beállítás korlátozza a GC-halmok számát.
- További információkért lásd a GCHeapCount megjegyzéseit.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapCount |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapCount |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapCount |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCHeapCount | decimális érték | .NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapCount": 16
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapCount": 16
}
}
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halmok számát 16-ra szeretné korlátozni, akkor a JSON-fájl értéke 16, a környezeti változó esetében pedig 0x10 vagy 10.
Maszk affinitása
- Megadja, hogy a szemétgyűjtő szálak pontosan mely processzorokat használják.
- Ha a GC processzor affinitása le van tiltva, a rendszer figyelmen kívül hagyja ezt a beállítást.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Az érték egy bitmaszk, amely meghatározza a folyamat számára elérhető processzorokat. Például egy 1023-ás decimális érték (vagy a 0x3FF hexadecimális értéke vagy 3FF, ha a környezeti változót használja) 0011 1111 1111 bináris jelölésben. Ez azt határozza meg, hogy az első 10 processzort kell használni. A következő 10 processzor, azaz a 10–19. processzorok megadásához adja meg a 1047552 (vagy 0xFFC00 vagy FFC00 hexadecimális értéke) decimális értékét, amely egyenértékű az 1111 1111 1111 1100 000 0000 bináris értékkel.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeMask |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapAffinitizeMask |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapAffinitizeMask |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCHeapAffinitizeMask | decimális érték | .NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
Tartományok affinitása
- Megadja a szemétgyűjtő szálakhoz használandó processzorok listáját.
- Ez a beállítás hasonló a System.GC.HeapAffinitizeMaskhoz, de több mint 64 processzor megadását teszi lehetővé.
- Windows operációs rendszerek esetén előtagként adja meg a processzor számát vagy tartományát a megfelelő processzorcsoporttal, például: "0:1-10,0:12,1:50-52,1:7". Ha valójában nem rendelkezik 1-nél több CPU-csoportval, ezt a beállítást nem használhatja. Az Affinitás maszk beállítását kell használnia. A megadott számok pedig ebben a csoportban vannak, ami azt jelenti, hogy nem lehet >= 64.
- Linux operációs rendszerek esetén, ahol a CPU-csoport fogalma nem létezik, ezt a beállítást és az affinitás maszk beállítását is használhatja ugyanazon tartományok megadásához. A "0:1-10" helyett pedig adja meg az "1-10" értéket, mert nem kell csoportindexet megadnia.
- Ha a GC processzor affinitása le van tiltva, a rendszer figyelmen kívül hagyja ezt a beállítást.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- További információt a Maoni Stephens blogján, a 64 CPU-val rendelkező > gépek processzorkonfigurációjának javítása a GC-ben című témakörben talál.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapAffinitizeRanges |
Vesszővel tagolt processzorszámok vagy processzorszámtartományok listája. Unix példa: "1-10,12,50-52,70" Windows-példa: "0:1-10,0:12,1:50-52,1:7" |
.NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
CPU-csoportok
Konfigurálja, hogy a szemétgyűjtő processzorcsoportokat használ-e vagy sem.
Ha egy 64 bites Windows-számítógép több processzorcsoportot is használ, azaz több mint 64 processzort használ, az elem engedélyezésével az összes CPU-csoportra kiterjed a szemétgyűjtés. A szemétgyűjtő minden magot használ a halom halom létrehozásához és kiegyensúlyozásához.
Feljegyzés
Ez egy csak Windows-alapú fogalom. A régebbi Windows-verziókban a Windows csak egy processzorcsoportra korlátozta a folyamatot. Így a GC csak egy processzorcsoportot használt, kivéve, ha ezt a beállítást több CPU-csoport engedélyezéséhez használta. Ez az operációsrendszer-korlátozás a Windows 11-ben és a Server 2022-ben megszűnt. A .NET 7-től kezdődően a GC alapértelmezés szerint az összes CPU-csoportot használja Windows 11 vagy Server 2022 rendszeren való futtatáskor.
Csak a 64 bites Windows operációs rendszerek kiszolgálói szemétgyűjtésére vonatkozik.
Alapértelmezett: A GC nem terjed ki a processzorcsoportokra. Ez egyenértékű az érték
0
beállításával.További információt a Maoni Stephens blogján, a 64 CPU-val rendelkező > gépek processzorkonfigurációjának javítása a GC-ben című témakörben talál.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.CpuGroup |
false -fogyatékostrue -Engedélyezve |
.NET 5 |
Környezeti változó | COMPlus_GCCpuGroup |
0 -fogyatékos1 -Engedélyezve |
.NET Core 1.0 |
Környezeti változó | DOTNET_GCCpuGroup |
0 -fogyatékos1 -Engedélyezve |
.NET 6 |
app.config for .NET-keretrendszer | GCCpuGroup | false -fogyatékostrue -Engedélyezve |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Feljegyzés
Ha a közös nyelvi futtatókörnyezetet (CLR) úgy szeretné konfigurálni, hogy a szálkészletből származó szálakat is eloszthassa az összes CPU-csoport között, engedélyezze a Thread_UseAllCpuGroups elem beállítását. A .NET Core-alkalmazások esetében ezt a beállítást a környezeti változó 1
értékének DOTNET_Thread_UseAllCpuGroups
beállításával engedélyezheti.
Affinitás
- Meghatározza, hogy a szemétgyűjtési szálakat a processzorokkal kell-e affinitani . A GC-szál affinitása azt jelenti, hogy csak az adott cpu-n futtatható. Minden GC-szálhoz létrejön egy halom.
- Csak a kiszolgáló szemétgyűjtésére vonatkozik.
- Alapértelmezett: A szemétgyűjtési szálak affinitása processzorokkal. Ez egyenértékű az érték
false
beállításával.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.NoAffinitize |
false - affinitástrue - nem affinitás |
.NET Core 3.0 |
Környezeti változó | COMPlus_GCNoAffinitize |
0 - affinitás1 - nem affinitás |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCNoAffinitize |
0 - affinitás1 - nem affinitás |
.NET 6 |
app.config for .NET-keretrendszer | GCNoAffinitize | false - affinitástrue - nem affinitás |
.NET-keretrendszer 4.6.2 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.NoAffinitize": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.NoAffinitize": true
}
}
Halom kemény korlátja
- A halom kemény korlátja a véglegesítés maximális mérete bájtban kifejezve a GC-halom és a GC-könyvelés esetében.
- Ez a beállítás csak a 64 bites számítógépekre vonatkozik.
- Ha ez a korlát nincs konfigurálva, de a folyamat memóriakorlátozott környezetben fut, azaz egy megadott memóriakorláttal rendelkező tárolóban egy alapértelmezett érték van beállítva. Ez az alapértelmezett érték a tároló memóriakorlátjának 20 MB vagy 75%-a.
- Ezt a beállítást a rendszer figyelmen kívül hagyja, ha az objektumonkénti halom kemény korlátai konfigurálva vannak.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimit |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapHardLimit |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapHardLimit |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 200 mebájt (MiB) korlátot szeretne megadni, az értékek a JSON-fájlhoz 209715200, a környezeti változóhoz pedig 0xC800000 vagy C800000.
Halom kemény korlát százalékos aránya
- A halom kemény korlátját a teljes fizikai memória százalékos arányaként adja meg. Ha a folyamat memóriakorlátozott környezetben fut, vagyis egy megadott memóriakorláttal rendelkező tárolóban a teljes fizikai memória a memóriakorlát; ellenkező esetben ez az, ami elérhető a gépen.
- Ez a beállítás csak a 64 bites számítógépekre vonatkozik.
- Ezt a beállítást a rendszer figyelmen kívül hagyja, ha az objektumonkénti halom kemény korlátja konfigurálva van, vagy a halom kemény korlátja van konfigurálva.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPercent |
decimális érték | .NET Core 3.0 |
Környezeti változó | COMPlus_GCHeapHardLimitPercent |
hexadecimális érték | .NET Core 3.0 |
Környezeti változó | DOTNET_GCHeapHardLimitPercent |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halomhasználatot 30%-ra szeretné korlátozni, akkor a JSON-fájl értéke 30, a környezeti változó esetében pedig 0x1E vagy 1E.
Objektumonkénti halom kemény korlátai
A GC halom kemény korlátját objektumonként határozhatja meg. A különböző halom a nagy objektum halom (LOH), a kis objektum halom (SOH) és a rögzített objektum halom (POH).
- Ha a , vagy a
DOTNET_GCHeapHardLimitSOH
beállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOH
: ésDOTNET_GCHeapHardLimitLOH
.DOTNET_GCHeapHardLimitPOH
DOTNET_GCHeapHardLimitLOH
Ha nem, a futtatókörnyezet inicializálása sikertelen lesz. - Az alapértelmezett érték a
DOTNET_GCHeapHardLimitPOH
0.DOTNET_GCHeapHardLimitSOH
ésDOTNET_GCHeapHardLimitLOH
nem rendelkeznek alapértelmezett értékekkel.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitSOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitSOH |
hexadecimális érték | .NET 6 |
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitLOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitLOH |
hexadecimális érték | .NET 6 |
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOH |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitPOH |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitPOH |
hexadecimális érték | .NET 6 |
Ezek a konfigurációs beállítások nem rendelkeznek meghatározott MSBuild tulajdonságokkal. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 200 mebájt (MiB) korlátot szeretne megadni, az értékek a JSON-fájlhoz 209715200, a környezeti változóhoz pedig 0xC800000 vagy C800000.
Objektumonkénti halom kemény korlát százalékos aránya
A GC halom kemény korlátját objektumonként határozhatja meg. A különböző halom a nagy objektum halom (LOH), a kis objektum halom (SOH) és a rögzített objektum halom (POH).
- Ha a , vagy a
DOTNET_GCHeapHardLimitSOHPercent
beállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOHPercent
: ésDOTNET_GCHeapHardLimitLOHPercent
.DOTNET_GCHeapHardLimitPOHPercent
DOTNET_GCHeapHardLimitLOHPercent
Ha nem, a futtatókörnyezet inicializálása sikertelen lesz. - Ezek a beállítások figyelmen kívül lesznek hagyva, ha
DOTNET_GCHeapHardLimitSOH
,DOTNET_GCHeapHardLimitLOH
ésDOTNET_GCHeapHardLimitPOH
meg vannak adva. - Az 1 érték azt jelenti, hogy a GC a teljes fizikai memória 1%-át használja az objektum halomához.
- Minden értéknek nullánál nagyobbnak és 100-nál kisebbnek kell lennie. Emellett a három százalékérték összegének 100-nál kisebbnek kell lennie. Ellenkező esetben a futtatókörnyezet inicializálása sikertelen lesz.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitSOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitSOHPercent |
hexadecimális érték | .NET 6 |
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitLOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitLOHPercent |
hexadecimális érték | .NET 6 |
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOHPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHeapHardLimitPOHPercent |
hexadecimális érték | .NET 5 |
Környezeti változó | DOTNET_GCHeapHardLimitPOHPercent |
hexadecimális érték | .NET 6 |
Ezek a konfigurációs beállítások nem rendelkeznek meghatározott MSBuild tulajdonságokkal. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a halomhasználatot 30%-ra szeretné korlátozni, akkor a JSON-fájl értéke 30, a környezeti változó esetében pedig 0x1E vagy 1E.
Magas memóriaszázalék
A memóriaterhelést a használatban lévő fizikai memória százalékos aránya jelzi. Alapértelmezés szerint, amikor a fizikai memória terhelése eléri a 90%-ot, a szemétgyűjtés agresszívebbé válik a teljes, tömörített szemétgyűjtemények miatt a lapozás elkerülése érdekében. Ha a memóriaterhelés 90% alatt van, a GC a teljes szemétgyűjtés háttérgyűjteményeit részesíti előnyben, amelyek rövidebb szünetekkel rendelkeznek, de nem csökkentik a halom teljes méretét. A jelentős mennyiségű memóriával rendelkező gépeken (80 GB vagy több) az alapértelmezett terhelési küszöbérték 90% és 97% között van.
A magas memóriaterhelési küszöbértéket a környezeti változó vagy System.GC.HighMemoryPercent
a DOTNET_GCHighMemPercent
JSON-konfigurációs beállítás módosíthatja. Érdemes lehet módosítani a küszöbértéket, ha szabályozni szeretné a halomméretet. Például a 64 GB memóriával rendelkező gépek domináns folyamata esetén ésszerű, ha a GC reagálni kezd, amikor a memória 10%-a elérhető. Kisebb folyamatok esetén azonban, például egy olyan folyamat esetében, amely csak 1 GB memóriát használ fel, a GC kényelmesen futtatható a rendelkezésre álló memória kevesebb mint 10%-ával. Ezekben a kisebb folyamatokban érdemes magasabbra állítani a küszöbértéket. Másrészt, ha azt szeretné, hogy a nagyobb folyamatok kisebb halommérettel rendelkezzenek (még akkor is, ha rengeteg fizikai memória áll rendelkezésre), a küszöbérték csökkentése hatékony módja annak, hogy a GC hamarabb reagáljon a halom le tömörítéséhez.
Feljegyzés
A tárolóban futó folyamatok esetében a GC a tárolókorlát alapján veszi figyelembe a fizikai memóriát.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.HighMemoryPercent |
decimális érték | .NET 5 |
Környezeti változó | COMPlus_GCHighMemPercent |
hexadecimális érték | .NET Core 3.0 .NET-keretrendszer 4.7.2 |
Környezeti változó | DOTNET_GCHighMemPercent |
hexadecimális érték | .NET 6 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például a magas memóriaküszöböt 75%-ra szeretné állítani, az értékek a JSON-fájl esetében 75, a környezeti változó esetében pedig 0x4B vagy 4B.
Virtuális gép megőrzése
- Konfigurálja, hogy a törölni kívánt szegmensek felkerülnek-e egy készenléti listára későbbi használatra, vagy visszakerülnek-e az operációs rendszerbe (OS).
- Alapértelmezett: Szegmensek visszaengedése az operációs rendszerbe. Ez egyenértékű az érték
false
beállításával.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.RetainVM |
false - operációs rendszerre való kiadástrue - készenléti állapotba helyezése |
.NET Core 1.0 |
MSBuild tulajdonság | RetainVMGarbageCollection |
false - operációs rendszerre való kiadástrue - készenléti állapotba helyezése |
.NET Core 1.0 |
Környezeti változó | COMPlus_GCRetainVM |
0 - operációs rendszerre való kiadás1 - készenléti állapotba helyezése |
.NET Core 1.0 |
Környezeti változó | DOTNET_GCRetainVM |
0 - operációs rendszerre való kiadás1 - készenléti állapotba helyezése |
.NET 6 |
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.RetainVM": true
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.RetainVM": true
}
}
Projektfájl:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
</Project>
Nagyméretű lapok
- Megadja, hogy nagy oldalakat kell-e használni a halom kemény korlátjának beállításakor.
- Alapértelmezett: Ne használjon nagy oldalakat, ha a halom kemény korlátja be van állítva. Ez egyenértékű az érték
0
beállításával. - Ez egy kísérleti beállítás.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | N.A. | N.A. | N.A. |
Környezeti változó | COMPlus_GCLargePages |
0 -fogyatékos1 -Engedélyezve |
.NET Core 3.0 |
Környezeti változó | DOTNET_GCLargePages |
0 -fogyatékos1 -Engedélyezve |
.NET 6 |
Nagyméretű objektumok engedélyezése
- 64 bites platformokon konfigurálja a szemétgyűjtő támogatását a 2 gigabájtnál (GB) nagyobb tömbökhöz.
- Alapértelmezett: A GC a 2 GB-nál nagyobb tömböket támogatja. Ez egyenértékű az érték
1
beállításával. - Ez a lehetőség elavulttá válhat a .NET egy későbbi verziójában.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | N.A. | N.A. | N.A. |
Környezeti változó | COMPlus_gcAllowVeryLargeObjects |
1 -Engedélyezve0 -fogyatékos |
.NET Core 1.0 |
Környezeti változó | DOTNET_gcAllowVeryLargeObjects |
1 -Engedélyezve0 -fogyatékos |
.NET 6 |
app.config for .NET-keretrendszer | gcAllowVeryLargeObjects | 1 -Engedélyezve0 -fogyatékos |
.NET-keretrendszer 4.5 |
Nagy objektum halomküszöbe
- Bájtban adja meg a küszöbértéket, amely miatt az objektumok a nagy méretű objektum halomra (LOH) kerülnek.
- Az alapértelmezett küszöbérték 85 000 bájt.
- A megadott értéknek nagyobbnak kell lennie az alapértelmezett küszöbértéknél.
- Előfordulhat, hogy a futtatókörnyezet az aktuális konfiguráció maximális méretére leképezi az értéket. Az API-n keresztül futtatáskor megvizsgálhatja a GC.GetConfigurationVariables() használatban lévő értéket.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.LOHThreshold |
decimális érték | .NET Core 1.0 |
Környezeti változó | COMPlus_GCLOHThreshold |
hexadecimális érték | .NET Core 1.0 |
Környezeti változó | DOTNET_GCLOHThreshold |
hexadecimális érték | .NET 6 |
app.config for .NET-keretrendszer | GCLOHThreshold | decimális érték | .NET-keretrendszer 4.8 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példák
runtimeconfig.json fájl:
{
"runtimeOptions": {
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
}
runtimeconfig.template.json fájl:
{
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
Tipp.
Ha runtimeconfig.json beállítását választja, adjon meg egy decimális értéket. Ha környezeti változóként állítja be a beállítást, adjon meg egy hexadecimális értéket. Ha például 120 000 bájtos küszöbértéket szeretne beállítani, akkor a JSON-fájl értéke 120000, a környezeti változó esetében pedig 0x1D4C0 vagy 1D4C0.
Önálló GC
Ha önálló szemétgyűjtőt szeretne használni az alapértelmezett GC-implementáció helyett, megadhatja az elérési utat (.NET 9-ben és újabb verziókban), vagy egy natív GC-kódtár nevét.
Elérési út
- Megadja annak a Natív GC-kódtárnak a teljes elérési útját, amelyet a futtatókörnyezet betölt az alapértelmezett GC-implementáció helyett. A biztonság érdekében ezt a helyet védeni kell a rosszindulatú illetéktelen beavatkozásoktól.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Path |
string_path | .NET 9 |
Környezeti változó | DOTNET_GCPath |
string_path | .NET 9 |
Név
Megadja annak a Natív GC-kódtárnak a nevét, amelyet a futtatókörnyezet betölt az alapértelmezett GC-implementáció helyett. A viselkedés megváltozott a .NET 9-ben az Elérési út konfigurációjának bevezetésével.
A .NET 8-ban és az előző verziókban:
- Ha csak a könyvtár neve van megadva, a könyvtárnak ugyanabban a könyvtárban kell lennie, mint a .NET-futtatókörnyezet (windowsos coreclr.dll , Linuxon libcoreclr.so vagy libcoreclr.dylib az OSX-en).
- Az érték lehet relatív elérési út is, például ha "." értéket ad meg. \clrgc.dll" a Windowsban, clrgc.dll a .NET futtatókörnyezet könyvtár szülőkönyvtárából töltődik be.
A .NET 9 és újabb verzióiban ez az érték csak egy fájlnevet határoz meg (az elérési utak nem engedélyezettek):
- A .NET megkeresi a megadott nevet abban a könyvtárban, amelyben az alkalmazás metódusát
Main
tartalmazó szerelvény található. - Ha a fájl nem található, a rendszer a .NET futtatókörnyezet könyvtárában keres.
Ezt a konfigurációs beállítást a rendszer figyelmen kívül hagyja, ha az Elérési út konfiguráció meg van adva.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.Name |
string_name | .NET 7 |
Környezeti változó | COMPlus_GCName |
string_name | .NET Core 2.0 |
Környezeti változó | DOTNET_GCName |
string_name | .NET 6 |
Memória megőrzése
- Úgy konfigurálja a szemétgyűjtőt, hogy a gyakoribb szemétgyűjtések és esetleg hosszabb szünetidők rovására takarékoskodjon a memóriával.
- Az alapértelmezett érték 0 – ez nem jelent változást.
- Az alapértelmezett 0 érték mellett az 1 és 9 közötti értékek (beleértve a elemet is) érvényesek. Minél magasabb az érték, annál inkább a szemétgyűjtő megpróbálja megőrizni a memóriát, és így a halom kicsi.
- Ha az érték nem nulla, a nagy méretű objektum halom automatikusan tömörítve lesz, ha túl nagy a töredezettsége.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
runtimeconfig.json | System.GC.ConserveMemory |
0 - 9 |
.NET 6 |
Környezeti változó | COMPlus_GCConserveMemory |
0 -9 |
.NET-keretrendszer 4.8 |
Környezeti változó | DOTNET_GCConserveMemory |
0 -9 |
.NET 6 |
app.config for .NET-keretrendszer | GCConserveMemory | 0 -9 |
.NET-keretrendszer 4.8 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.
Példa app.config fájlra:
<configuration>
<runtime>
<GCConserveMemory enabled="5"/>
</runtime>
</configuration>
Tipp.
Kísérletezzen különböző számokkal, hogy lássa, melyik érték működik a legjobban. Kezdje 5 és 7 közötti értékkel.
Dinamikus alkalmazkodás az alkalmazásméretekhez (DATAS)
- Konfigurálja a szemétgyűjtőt a DATAS használatára. A DATAS alkalmazkodik az alkalmazás memóriaigényéhez, ami azt jelenti, hogy az alkalmazás halomméretének nagyjából arányosnak kell lennie a hosszú élettartamú adatmérettel.
- Alapértelmezés szerint engedélyezve van a .NET 9-től kezdve.
Név beállítása | Értékek | Bevezetett verzió | |
---|---|---|---|
Környezeti változó | DOTNET_GCDynamicAdaptationMode |
1 -Engedélyezve0 -fogyatékos |
.NET 8 |
MSBuild tulajdonság | GarbageCollectionAdaptationMode |
1 -Engedélyezve0 -fogyatékos |
.NET 8 |
runtimeconfig.json | System.GC.DynamicAdaptationMode |
1 -Engedélyezve0 -fogyatékos |
.NET 8 |
Ez a konfigurációs beállítás nem tartalmaz adott MSBuild tulajdonságot. Ehelyett azonban hozzáadhat egy RuntimeHostConfigurationOption
MSBuild elemet. Az attribútum értékeként Include
használja a runtimeconfig.json beállításnevet. Példa: MSBuild properties.