Megosztás a következőn keresztül:


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á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-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 falsebeállításával.
Név beállítása Értékek Bevezetett verzió
runtimeconfig.json System.GC.Server false -munkaállomás
true -kiszolgáló
.NET Core 1.0
MSBuild tulajdonság ServerGarbageCollection false -munkaállomás
true -kiszolgáló
.NET Core 1.0
Környezeti változó COMPlus_gcServer 0 -munkaállomás
1 -kiszolgáló
.NET Core 1.0
Környezeti változó DOTNET_gcServer 0 -munkaállomás
1 -kiszolgáló
.NET 6
app.config for .NET-keretrendszer GCServer false -munkaállomás
true -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 truebeá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 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á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 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.

Név beállítása Értékek Bevezetett verzió
runtimeconfig.json System.GC.CpuGroup false -fogyatékos
true -Engedélyezve
.NET 5
Környezeti változó COMPlus_GCCpuGroup 0 -fogyatékos
1 -Engedélyezve
.NET Core 1.0
Környezeti változó DOTNET_GCCpuGroup 0 -fogyatékos
1 -Engedélyezve
.NET 6
app.config for .NET-keretrendszer GCCpuGroup false -fogyatékos
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. 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 falsebeállításával.
Név beállítása É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. 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_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_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 és DOTNET_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_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_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é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.
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 falsebeá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á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.
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ékos
1 -Engedélyezve
.NET Core 3.0
Környezeti változó DOTNET_GCLargePages 0 -fogyatékos
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.
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élyezve
0 -fogyatékos
.NET Core 1.0
Környezeti változó DOTNET_gcAllowVeryLargeObjects 1 -Engedélyezve
0 -fogyatékos
.NET 6
app.config for .NET-keretrendszer gcAllowVeryLargeObjects 1 -Engedélyezve
0 -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élyezve
0 -fogyatékos
.NET 8
MSBuild tulajdonság GarbageCollectionAdaptationMode 1 -Engedélyezve
0 -fogyatékos
.NET 8
runtimeconfig.json System.GC.DynamicAdaptationMode 1 -Engedélyezve
0 -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.