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.

Gépház 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.

Megjegyzé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. Gépház, amelyek futásidőben módosíthatók API-kkal( például késési szinttel) nem jelennek meg ezen a lapon.
  • 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 a runtimeconfig.template.json fájl beállításaihoz, és hexadecimális jelölést a környezeti változó beállításaihoz. 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ák COMPlus_. Az COMPlus_ 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ául COMPlus_gcServeraz COMPlus_ 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 Framework 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áshoz GCHeapCount 12 halomot szeretne megadni, adja hozzá a következő XML-t az 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 a 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 falsebeállításával.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json System.GC.Server false -Munkaállomás
true -Szerver
.NET Core 1.0
MSBuild tulajdonság ServerGarbageCollection false -Munkaállomás
true -Szerver
.NET Core 1.0
Környezeti változó COMPlus_gcServer 0 -Munkaállomás
1 -Szerver
.NET Core 1.0
Környezeti változó DOTNET_gcServer 0 -Munkaállomás
1 -Szerver
.NET 6
app.config for .NET-keretrendszer GCServer false -Munkaállomás
true -Szerver

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 truebeállításával.
  • További információ: Háttér szemétgyűjtés.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json System.GC.Concurrent true - háttérbeli GC
false - nem egyidejű GC
.NET Core 1.0
MSBuild tulajdonság ConcurrentGarbageCollection true - háttérbeli GC
false - nem egyidejű GC
.NET Core 1.0
Környezeti változó COMPlus_gcConcurrent 1 - háttérbeli GC
0 - nem egyidejű GC
.NET Core 1.0
Környezeti változó DOTNET_gcConcurrent 1 - háttérbeli GC
0 - nem egyidejű GC
.NET 6
app.config for .NET-keretrendszer gcConcurrent true - háttérbeli GC
false - 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:

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ánakvagy 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.
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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 a runtimeconfig.json fájlban állítja be a beállítást, 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.
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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.
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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.

    Megjegyzé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 0beá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.

A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json System.GC.CpuGroup false -Tiltva
true -Engedélyezve
.NET 5
Környezeti változó COMPlus_GCCpuGroup 0 -Tiltva
1 -Engedélyezve
.NET Core 1.0
Környezeti változó DOTNET_GCCpuGroup 0 -Tiltva
1 -Engedélyezve
.NET 6
app.config for .NET-keretrendszer GCCpuGroup false -Tiltva
true -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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. Példa: MSBuild properties.

Megjegyzé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 falsebeállításával.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json System.GC.NoAffinitize false - affinitás
true - nem affinitás
.NET Core 3.0
Környezeti változó COMPlus_GCNoAffinitize 0 - affinitás
1 - nem affinitás
.NET Core 3.0
Környezeti változó DOTNET_GCNoAffinitize 0 - affinitás
1 - nem affinitás
.NET 6
app.config for .NET-keretrendszer GCNoAffinitize false - affinitás
true - 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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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
   }
}

Halomkorlát

  • A maximális véglegesítési méretet adja meg bájtban 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.

  • Ez a beállítás figyelmen kívül lesz hagyva, ha az objektumonkénti halomkorlátok vannak konfigurálva.

  • Az alapértelmezett érték, amely csak bizonyos esetekben érvényes, a tároló memóriakorlátjának 20 MB-os vagy 75%-os nagyobb értéke. Az alapértelmezett érték akkor érvényes, ha:

A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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 a runtimeconfig.json fájlban állítja be a beállítást, 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.

Halomkorlát százalékos aránya

  • A teljes fizikai memória százalékos arányában adja meg a megengedett GC-halomhasználatot.

  • Ha a System.GC.HeapHardLimit is be van állítva, a rendszer figyelmen kívül hagyja ezt a beállítást.

  • Ez a beállítás csak a 64 bites számítógépekre vonatkozik.

  • Ha a folyamat egy megadott memóriakorláttal rendelkező tárolóban fut, a rendszer ennek a memóriakorlátnak a százalékában számítja ki a százalékos értéket.

  • Ez a beállítás figyelmen kívül lesz hagyva, ha az objektumonkénti halomkorlátok vannak konfigurálva.

  • Az alapértelmezett érték, amely csak bizonyos esetekben érvényes, a tároló memóriakorlátjának 20 MB-os vagy 75%-os nagyobb értéke. Az alapértelmezett érték akkor érvényes, ha:

A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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 a runtimeconfig.json fájlban állítja be a beállítást, 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 halomkorlátok

A GC engedélyezett halomhasználatá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_GCHeapHardLimitSOHbeállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOH: és DOTNET_GCHeapHardLimitLOH.DOTNET_GCHeapHardLimitPOHDOTNET_GCHeapHardLimitLOH Ha nem, a futtatókörnyezet inicializálása sikertelen lesz.
  • Az alapértelmezett érték a DOTNET_GCHeapHardLimitPOH 0. DOTNET_GCHeapHardLimitSOH és DOTNET_GCHeapHardLimitLOH nem rendelkeznek alapértelmezett értékekkel.
A beállítás neve É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
A beállítás neve É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
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. Példa: MSBuild properties.

Tipp.

Ha a runtimeconfig.json fájlban állítja be a beállítást, 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 halomkorlát százalékos száma

A GC engedélyezett halomhasználatá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_GCHeapHardLimitSOHPercentbeállítások bármelyikéhez értéket ad meg, meg kell adnia egy értéket is a következőhözDOTNET_GCHeapHardLimitSOHPercent: és DOTNET_GCHeapHardLimitLOHPercent.DOTNET_GCHeapHardLimitPOHPercentDOTNET_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és DOTNET_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.
A beállítás neve É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
A beállítás neve É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
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. Példa: MSBuild properties.

Tipp.

Ha a runtimeconfig.json fájlban állítja be a beállítást, 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.

Megjegyzé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.

A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. Példa: MSBuild properties.

Tipp.

Ha a runtimeconfig.json fájlban állítja be a beállítást, 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 falsebeállításával.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json System.GC.RetainVM false - operációs rendszerre való kiadás
true - készenléti állapotba helyezése
.NET Core 1.0
MSBuild tulajdonság RetainVMGarbageCollection false - operációs rendszerre való kiadás
true - készenléti állapotba helyezése
.NET Core 1.0
Környezeti változó COMPlus_GCRetainVM 0 - operációs rendszerre való kiadás
1 - készenléti állapotba helyezése
.NET Core 1.0
Környezeti változó DOTNET_GCRetainVM 0 - operációs rendszerre való kiadás
1 - 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 0beállításával.
  • Ez egy kísérleti beállítás.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json N.A. N/A N.A.
Környezeti változó COMPlus_GCLargePages 0 -Tiltva
1 -Engedélyezve
.NET Core 3.0
Környezeti változó DOTNET_GCLargePages 0 -Tiltva
1 -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 1beállításával.
  • Ez a lehetőség elavulttá válhat a .NET egy későbbi verziójában.
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json N.A. N/A N.A.
Környezeti változó COMPlus_gcAllowVeryLargeObjects 1 -Engedélyezve
0 -Tiltva
.NET Core 1.0
Környezeti változó DOTNET_gcAllowVeryLargeObjects 1 -Engedélyezve
0 -Tiltva
.NET 6
app.config for .NET-keretrendszer gcAllowVeryLargeObjects 1 -Engedélyezve
0 -Tiltva
.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.
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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 a runtimeconfig.json fájlban állítja be a beállítást, 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

  • 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. Ennek a natív kódtárnak ugyanabban a könyvtárban kell lennie, mint a .NET-futtatókörnyezetnek (coreclr.dll Windows rendszeren, libcoreclr.so Linuxon).
A beállítás neve Értékek Bevezetett verzió
runtimeconfig.json N.A. N/A N.A.
Környezeti változó COMPlus_GCName string_path .NET Core 2.0
Környezeti változó DOTNET_GCName string_path .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.
A beállítás neve É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. Használja a runtimeconfig.json beállításnevet az Include attribútum értékeként. 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.