Možnosti konfigurace modulu runtime pro uvolňování paměti

Tato stránka obsahuje informace o nastavení pro uvolňování paměti modulu runtime .NET (GC). Pokud se pokoušíte dosáhnout špičkového výkonu spuštěné aplikace, zvažte použití těchto nastavení. Výchozí nastavení ale poskytují optimální výkon většiny aplikací v obvyklých situacích.

Nastavení jsou uspořádaná do skupin na této stránce. Nastavení v rámci každé skupiny se běžně používají ve spojení s ostatními k dosažení konkrétního výsledku.

Poznámka

  • Tato nastavení se také dají dynamicky měnit aplikací při jeho spuštění, takže všechny možnosti konfigurace, které nastavíte, se můžou přepsat.
  • Některá nastavení, jako je například úroveň latence, se obvykle nastavuje jenom prostřednictvím rozhraní API v době návrhu. Tato nastavení jsou z této stránky vynechána.
  • U číselných hodnot použijte pro nastavení nastavení v souboru runtimeconfig.json a šestnáctkové notace pro nastavení proměnné prostředí. U šestnáctkových hodnot je můžete zadat s předponou 0x nebo bez něj.
  • Pokud používáte proměnné prostředí, standardizuje .NET 6 předponu DOTNET_ místo COMPlus_. Předpona COMPlus_ ale bude dál fungovat. Pokud používáte předchozí verzi modulu runtime .NET, měli byste stále používat předponu COMPlus_ , například COMPlus_gcServer.

Způsoby určení konfigurace

Pro různé verze modulu runtime .NET existují různé způsoby určení hodnot konfigurace. Následující tabulka obsahuje souhrn.

Umístění konfigurace Verze .NET, pro které se toto umístění vztahuje Formáty Jak se interpretuje
soubor runtimeconfig.json .NET Core n N se interpretuje jako desetinná hodnota.
Proměnná prostředí .NET Framework, .NET Core 0xn nebo n N se interpretuje jako šestnáctkové hodnoty v obou formátech.
app.config soubor .NET Framework 0xn N se interpretuje jako šestnáctkové hodnoty1.

1 Můžete zadat hodnotu bez 0x předpony pro nastavení app.config souboru, ale nedoporučuje se. V rozhraní .NET Framework 4.8+ kvůli chybě se hodnota zadaná bez 0x předpony interpretuje jako šestnáctková, ale v předchozích verzích rozhraní .NET Framework se interpretuje jako desetinná čárka. Pokud se chcete vyhnout změně konfigurace, použijte předponu 0x při zadávání hodnoty v souboru app.config.

Pokud chcete například zadat 12 heaps pro GCHeapCount aplikaci .NET Framework s názvem A.exe, přidejte do souboruA.exe.config následující XML.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    ...
    <runtime>
        <gcServer enabled="true"/>
        <GCHeapCount>0xc</GCHeapCount>
    </runtime>
</configuration>

Pro .NET Core i .NET Framework můžete použít proměnné prostředí.

Ve Windows s využitím .NET 5 nebo novější verze:

SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c

Ve Windows používáte .NET Core 3.1 nebo starší:

SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c

V jiných operačních systémech:

Pro .NET 5 nebo novější verze:

export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c

Pro .NET Core 3.1 a starší verze:

export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c

Pouze pro .NET Core můžete nastavit hodnotu v souboru runtimeconfig.json .

{
  "runtimeOptions": {
   "configProperties": {
      "System.GC.Server": true,
      "System.GC.HeapCount": 12
   }
  }
}

Příchuť uvolňování paměti

Dvě hlavní příchutě uvolňování paměti jsou pracovní stanice GC a serverové GC. Další informace o rozdílech mezi těmito dvěma typy najdete v tématu Pracovní stanice a uvolňování paměti serveru.

Subflavory uvolňování paměti jsou pozadí a ne souběžné.

Pomocí následujících nastavení vyberte varianty uvolňování paměti:

Pracovní stanice a server

  • Nakonfiguruje, jestli aplikace používá uvolňování paměti pracovní stanice nebo uvolňování paměti serveru.
  • Výchozí nastavení: Uvolňování paměti pracovní stanice To je ekvivalentní nastavení hodnoty na false.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.Server false - pracovní stanice
true - server
.NET Core 1.0
Vlastnost MSBuild ServerGarbageCollection false - pracovní stanice
true - server
.NET Core 1.0
Proměnná prostředí COMPlus_gcServer 0 - pracovní stanice
1 - server
.NET Core 1.0
Proměnná prostředí DOTNET_gcServer 0 - pracovní stanice
1 - server
.NET 6
app.config pro .NET Framework GCServer false - pracovní stanice
true - server

Příklady

soubor runtimeconfig.json:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.Server": true
      }
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <ServerGarbageCollection>true</ServerGarbageCollection>
  </PropertyGroup>

</Project>

Uvolňování paměti pozadí

  • Nakonfiguruje, jestli je povolené uvolňování paměti na pozadí (souběžné).
  • Výchozí nastavení: Použijte GC na pozadí. To je ekvivalentní nastavení hodnoty na true.
  • Další informace najdete v tématu Uvolňování paměti na pozadí.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.Concurrent true - GC na pozadí
false – ne souběžné GC
.NET Core 1.0
Vlastnost MSBuild ConcurrentGarbageCollection true - GC na pozadí
false – ne souběžné GC
.NET Core 1.0
Proměnná prostředí COMPlus_gcConcurrent 1 - uvolňování paměti na pozadí
0 – ne souběžné uvolňování paměti
.NET Core 1.0
Proměnná prostředí DOTNET_gcConcurrent 1 - uvolňování paměti na pozadí
0 – ne souběžné uvolňování paměti
.NET 6
app.config pro rozhraní .NET Framework gcConcurrent true - uvolňování paměti na pozadí
false – ne souběžné uvolňování paměti

Příklady

soubor runtimeconfig.json :

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.Concurrent": false
      }
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
  </PropertyGroup>

</Project>

Správa využití prostředků

Ke správě využití paměti a procesoru uvolňování paměti použijte následující nastavení:

Další informace o některých z těchto nastavení naleznete v middle ground between workstation and server GC blog entry.

Počet hald

Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.HeapCount desetinná hodnota .NET Core 3.0
Proměnná prostředí COMPlus_GCHeapCount šestnáctková hodnota .NET Core 3.0
Proměnná prostředí DOTNET_GCHeapCount šestnáctková hodnota .NET 6
app.config pro rozhraní .NET Framework GCHeapCount desetinná hodnota .NET Framework 4.6.2

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapCount": 16
      }
   }
}

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud tuto možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například omezit počet hald na 16, budou hodnoty pro soubor JSON 16 a 0x10 nebo 10 pro proměnnou prostředí.

Spřažení masky

  • Určuje přesné procesory, které by měla používat vlákna uvolňování paměti.
  • Pokud je spřažení procesoru uvolňování paměti zakázané, toto nastavení se ignoruje.
  • Platí pouze pro uvolňování paměti serveru.
  • Hodnota je bitová maska, která definuje procesory, které jsou k dispozici procesu. Například desetinná hodnota 1023 (nebo šestnáctková hodnota 0x3FF nebo 3FF, pokud používáte proměnnou prostředí) je v binárním zápisu 0011 1111 1111. Určuje, že se má použít prvních 10 procesorů. Chcete-li zadat dalších 10 procesorů, to znamená procesory 10–19, zadejte desetinnou hodnotu 1047552 (nebo šestnáctkové hodnoty 0xFFC00 nebo FFC00), která je ekvivalentní binární hodnotě 1111 1111 1111 1100 0000 0000.
Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.HeapAffinitizeMask desetinná hodnota .NET Core 3.0
Proměnná prostředí COMPlus_GCHeapAffinitizeMask šestnáctková hodnota .NET Core 3.0
Proměnná prostředí DOTNET_GCHeapAffinitizeMask šestnáctková hodnota .NET 6
app.config pro rozhraní .NET Framework GCHeapAffinitizeMask desetinná hodnota .NET Framework 4.6.2

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapAffinitizeMask": 1023
      }
   }
}

Spřažení oblastí

Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.HeapAffinitizeRanges Seznam čísel procesorů oddělených čárkami nebo rozsahy čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:70"
.NET Core 3.0
Proměnná prostředí COMPlus_GCHeapAffinitizeRanges Seznam čísel procesorů oddělených čárkami nebo rozsahy čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:70"
.NET Core 3.0
Proměnná prostředí DOTNET_GCHeapAffinitizeRanges Seznam čísel procesorů oddělených čárkami nebo rozsahy čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:70"
.NET 6

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:70"
      }
   }
}

Skupiny procesorů

  • Nakonfiguruje, jestli systém uvolňování paměti používá skupiny procesoru , nebo ne.

    Pokud má 64bitový počítač s Windows více skupin procesorů, to znamená, že existuje více než 64 procesorů, což umožňuje tento prvek rozšířit uvolňování paměti napříč všemi skupinami procesoru. Systém uvolňování paměti používá všechna jádra k vytvoření a vyvážení hald.

  • Platí pouze pro uvolňování paměti serveru v 64bitových operačních systémech Windows.

  • Výchozí hodnota: Uvolňování paměti se nerozsahuje mezi skupinami procesoru. To je ekvivalentem nastavení hodnoty na 0.

  • Další informace naleznete v tématu Zlepšení konfigurace procesoru pro GC na počítačích s > 64 procesory na blogu Maoni Stephens.

Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.CpuGroup false - zakázáno
true - povoleno
.NET 5
Proměnná prostředí COMPlus_GCCpuGroup 0 - zakázáno
1 - povoleno
.NET Core 1.0
Proměnná prostředí DOTNET_GCCpuGroup 0 - zakázáno
1 - povoleno
.NET 6
app.config pro rozhraní .NET Framework GCCpuGroup false - zakázáno
true - povoleno

Poznámka

Pokud chcete nakonfigurovat modul CLR (Common Language Runtime), aby také distribuovali vlákna z fondu vláken napříč všemi skupinami procesoru, povolte možnost Thread_UseAllCpuGroups elementu . U aplikací .NET Core můžete tuto možnost povolit nastavením hodnoty DOTNET_Thread_UseAllCpuGroups proměnné prostředí na 1hodnotu .

Spřažení

  • Určuje, zda se mají spřažení vláken uvolňování paměti s procesory. Pokud chcete spřažení vlákna uvolňování paměti spřažení, znamená to, že může běžet pouze na konkrétním procesoru. Pro každé vlákno uvolňování paměti se vytvoří halda.
  • Platí pouze pro uvolňování paměti serveru.
  • Výchozí: Spřažení vláken uvolňování paměti s procesory To je ekvivalentem nastavení hodnoty na false.
Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.NoAffinitize false - spřažení
true - spřažení
.NET Core 3.0
Proměnná prostředí COMPlus_GCNoAffinitize 0 - spřažení
1 - spřažení
.NET Core 3.0
Proměnná prostředí DOTNET_GCNoAffinitize 0 - spřažení
1 - spřažení
.NET 6
app.config pro rozhraní .NET Framework GCNoAffinitize false - spřažení
true - spřažení
.NET Framework 4.6.2

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.NoAffinitize": true
      }
   }
}

Limit haldy

  • Určuje maximální velikost potvrzení v bajtech pro haldu GC a uchovávání knih GC.

  • Toto nastavení platí jenom pro 64bitové počítače.

  • Toto nastavení se ignoruje, pokud jsou nakonfigurovaná omezení haldy pro jednotlivé objekty .

  • Výchozí hodnota, která se vztahuje pouze v některých případech, je větší 20 MB nebo 75 % limitu paměti v kontejneru. Výchozí hodnota platí, pokud:

Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.HeapHardLimit desetinná hodnota .NET Core 3.0
Proměnná prostředí COMPlus_GCHeapHardLimit šestnáctková hodnota .NET Core 3.0
Proměnná prostředí DOTNET_GCHeapHardLimit šestnáctková hodnota .NET 6

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapHardLimit": 209715200
      }
   }
}

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud tuto možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například zadat pevný limit haldy 200 mebibajtů (MiB), budou hodnoty 209715200 pro soubor JSON a 0xC800000 nebo C800000 pro proměnnou prostředí.

Procento limitu haldy

  • Určuje povolené využití haldy uvolňování paměti jako procento celkové fyzické paměti.

  • Pokud je nastavena také vlastnost System.GC.HeapHardLimit , bude toto nastavení ignorováno.

  • Toto nastavení platí jenom pro 64bitové počítače.

  • Pokud proces běží v kontejneru, který má zadaný limit paměti, procento se vypočítá jako procento tohoto limitu paměti.

  • Toto nastavení se ignoruje, pokud jsou nakonfigurovaná omezení haldy pro jednotlivé objekty .

  • Výchozí hodnota, která se vztahuje pouze v některých případech, je větší 20 MB nebo 75 % limitu paměti v kontejneru. Výchozí hodnota platí, pokud:

Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitPercent desetinná hodnota .NET Core 3.0
Proměnná prostředí COMPlus_GCHeapHardLimitPercent šestnáctková hodnota .NET Core 3.0
Proměnná prostředí DOTNET_GCHeapHardLimitPercent šestnáctková hodnota .NET 6

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.HeapHardLimitPercent": 30
      }
   }
}

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud nastavujete možnost jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například omezit využití haldy na 30 %, hodnoty by byly 30 pro soubor JSON a 0x1E nebo 1E pro proměnnou prostředí.

Omezení haldy podle objektu

Povolené využití haldy GC můžete určit na základě haldy pro jednotlivé objekty. Různé haldy jsou velká halda objektu (LOH), malá halda objektu (SOH) a připnutá halda objektu (POH).

  • Pokud zadáte hodnotu pro některou z DOTNET_GCHeapHardLimitSOHhodnot , DOTNET_GCHeapHardLimitLOHnebo DOTNET_GCHeapHardLimitPOH nastavení, musíte také zadat hodnotu pro DOTNET_GCHeapHardLimitSOH a DOTNET_GCHeapHardLimitLOH. Pokud ne, modul runtime se nepodaří inicializovat.
  • Výchozí hodnota je DOTNET_GCHeapHardLimitPOH 0. DOTNET_GCHeapHardLimitSOH a DOTNET_GCHeapHardLimitLOH nemá výchozí hodnoty.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitSOH desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitSOH šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitSOH šestnáctková hodnota .NET 6
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitLOH desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitLOH šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitLOH šestnáctková hodnota .NET 6
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitPOH desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitPOH šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitPOH šestnáctková hodnota .NET 6

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud nastavujete možnost jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například zadat pevný limit haldy 200 mebibajtů (MiB), hodnoty by byly 209715200 pro soubor JSON a 0xC800000 nebo C800000 pro proměnnou prostředí.

Procento limitu haldy podle objektu

Povolené využití haldy GC můžete určit na základě haldy pro jednotlivé objekty. Různé haldy jsou velká halda objektu (LOH), malá halda objektu (SOH) a připnutá halda objektu (POH).

  • Pokud zadáte hodnotu pro některou z DOTNET_GCHeapHardLimitSOHPercenthodnot , DOTNET_GCHeapHardLimitLOHPercentnebo DOTNET_GCHeapHardLimitPOHPercent nastavení, musíte také zadat hodnotu pro DOTNET_GCHeapHardLimitSOHPercent a DOTNET_GCHeapHardLimitLOHPercent. Pokud ne, modul runtime se nepodaří inicializovat.
  • Tato nastavení se ignorují, pokud DOTNET_GCHeapHardLimitSOHDOTNET_GCHeapHardLimitLOH, a DOTNET_GCHeapHardLimitPOH jsou zadána.
  • Hodnota 1 znamená, že GC používá pro haldu tohoto objektu 1 % celkové fyzické paměti.
  • Každá hodnota musí být větší než nula a menší než 100. Kromě toho musí být součet tří procentuálních hodnot menší než 100. V opačném případě se modul runtime nepodaří inicializovat.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitSOHPercent desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitSOHPercent šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitSOHPercent šestnáctková hodnota .NET 6
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitLOHPercent desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitLOHPercent šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitLOHPercent šestnáctková hodnota .NET 6
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapHardLimitPOHPercent desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHeapHardLimitPOHPercent šestnáctková hodnota .NET 5
Proměnná prostředí DOTNET_GCHeapHardLimitPOHPercent šestnáctková hodnota .NET 6

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud nastavujete možnost jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například omezit využití haldy na 30 %, hodnoty by byly 30 pro soubor JSON a 0x1E nebo 1E pro proměnnou prostředí.

Vysoké procento paměti

Zatížení paměti je označeno procentem používané fyzické paměti. Ve výchozím nastavení, když zatížení fyzické paměti dosáhne 90 %, uvolňování paměti se stává agresivnější o provádění plného komprimace uvolňování paměti, aby se zabránilo stránkování. Pokud je zatížení paměti nižší než 90 %, GC upřednostňuje kolekce pozadí pro úplné uvolňování paměti, které mají kratší pozastavení, ale nezmenšují celkovou velikost haldy o moc. Na počítačích s velkým množstvím paměti (80 GB nebo více) je výchozí prahová hodnota zatížení mezi 90 % a 97 %.

Prahovou hodnotu vysokého zatížení paměti lze upravit DOTNET_GCHighMemPercent nastavením proměnné prostředí nebo System.GC.HighMemoryPercent konfigurace JSON. Pokud chcete řídit velikost haldy, zvažte úpravu prahové hodnoty. Například pro dominantní proces na počítači s 64 GB paměti je vhodné, aby GC začal reagovat, když je k dispozici 10 % paměti. Pro menší procesy, například proces, který spotřebovává pouze 1 GB paměti, může GC pohodlně běžet s méně než 10% dostupnou pamětí. U těchto menších procesů zvažte nastavení prahové hodnoty vyšší. Na druhou stranu, pokud chcete, aby větší procesy měly menší velikosti haldy (i když je k dispozici spousta fyzické paměti), snížení této prahové hodnoty je efektivní způsob, jak GC reagovat dříve, aby zkomprimoval haldu dolů.

Poznámka

Pro procesy spuštěné v kontejneru považuje GC fyzickou paměť na základě limitu kontejneru.

Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HighMemoryPercent desetinná hodnota .NET 5
Proměnná prostředí COMPlus_GCHighMemPercent šestnáctková hodnota .NET Core 3.0
.NET Framework 4.7.2
Proměnná prostředí DOTNET_GCHighMemPercent šestnáctková hodnota .NET 6

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud nastavujete možnost jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například nastavit prahovou hodnotu vysoké paměti na 75 %, hodnoty by byly 75 pro soubor JSON a 0x4B nebo 4B pro proměnnou prostředí.

Zachování virtuálního počítače

  • Nakonfiguruje, jestli se segmenty, které by se měly odstranit, umístí do pohotovostního seznamu pro budoucí použití nebo se uvolní zpět do operačního systému (OS).
  • Výchozí nastavení: Uvolnění segmentů zpět do operačního systému To je ekvivalentní nastavení hodnoty na false.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.RetainVM false – vydání operačního systému
true - zapněte pohotovostní režim
.NET Core 1.0
Vlastnost MSBuild RetainVMGarbageCollection false – vydání operačního systému
true - zapněte pohotovostní režim
.NET Core 1.0
Proměnná prostředí COMPlus_GCRetainVM 0 – vydání operačního systému
1 - zapněte pohotovostní režim
.NET Core 1.0
Proměnná prostředí DOTNET_GCRetainVM 0 – vydání operačního systému
1 - zapněte pohotovostní režim
.NET 6

Příklady

soubor runtimeconfig.json:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.RetainVM": true
      }
   }
}

Soubor projektu:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <RetainVMGarbageCollection>true</RetainVMGarbageCollection>
  </PropertyGroup>

</Project>

Velké stránky

  • Určuje, jestli se mají velké stránky použít při nastavení pevného limitu haldy.
  • Výchozí nastavení: Nepoužívejte velké stránky, pokud je nastavený pevný limit haldy. To je ekvivalentní nastavení hodnoty na 0.
  • Toto je experimentální nastavení.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json N/A N/A N/A
Proměnná prostředí COMPlus_GCLargePages 0 - zakázáno
1 - povoleno
.NET Core 3.0
Proměnná prostředí DOTNET_GCLargePages 0 - zakázáno
1 - povoleno
.NET 6

Povolit velké objekty

  • Nakonfiguruje podporu uvolňování paměti na 64bitových platformách pro pole větší než 2 gigabajty (GB) v celkové velikosti.
  • Výchozí nastavení: GC podporuje pole větší než 2 GB. To je ekvivalentní nastavení hodnoty na 1.
  • Tato možnost může být zastaralá v budoucí verzi .NET.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json N/A N/A N/A
Proměnná prostředí COMPlus_gcAllowVeryLargeObjects 1 - povoleno
0 - zakázáno
.NET Core 1.0
Proměnná prostředí DOTNET_gcAllowVeryLargeObjects 1 - povoleno
0 - zakázáno
.NET 6
app.config pro rozhraní .NET Framework gcAllowVeryLargeObjects 1 - povoleno
0 - zakázáno
.NET Framework 4.5

Prahová hodnota haldy velkého objektu

  • Určuje prahovou hodnotu v bajtech, která způsobí, že objekty budou pokračovat na velké haldě objektu (LOH).
  • Výchozí prahová hodnota je 85 000 bajtů.
  • Zadaná hodnota musí být větší než výchozí prahová hodnota.
Název nastavení Hodnoty Představená verze
runtimeconfig.json System.GC.LOHThreshold desetinná hodnota .NET Core 1.0
Proměnná prostředí COMPlus_GCLOHThreshold šestnáctková hodnota .NET Core 1.0
Proměnná prostředí DOTNET_GCLOHThreshold šestnáctková hodnota .NET 6
app.config pro rozhraní .NET Framework GCLOHThreshold desetinná hodnota .NET Framework 4.8

Příklad:

{
   "runtimeOptions": {
      "configProperties": {
         "System.GC.LOHThreshold": 120000
      }
   }
}

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud tuto možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud chcete například nastavit prahovou hodnotu 120 000 bajtů, budou hodnoty pro soubor JSON 120000 a 0x1D4C0 nebo 1D4C0 pro proměnnou prostředí.

Samostatné uvolňování paměti

  • Určuje cestu k knihovně obsahující uvolňování paměti, kterou má modul runtime načíst.
  • Další informace naleznete v tématu Návrh samostatného zavaděče GC.
Název nastavení Hodnoty Představená verze
runtimeconfig.json N/A N/A N/A
Proměnná prostředí COMPlus_GCName string_path .NET Core 2.0
Proměnná prostředí DOTNET_GCName string_path .NET 6

Úspora paměti

  • Konfiguruje uvolňování paměti tak, aby ušetřil paměť na úkor častějších uvolňování paměti a případně delší doby pozastavení.
  • Výchozí hodnota je 0 – znamená to žádnou změnu.
  • Kromě výchozí hodnoty 0 jsou hodnoty mezi 1 a 9 (včetně) platné. Čím vyšší je hodnota, tím více se uvolňování paměti snaží ušetřit paměť, a tím udržet haldu malou.
  • Pokud je hodnota nenulová, velká halda objektu se zkomprimuje automaticky, pokud má příliš velkou fragmentaci.
Název nastavení Hodnoty Představená verze
runtimeconfig.json N/A N/A N/A
Proměnná prostředí COMPlus_GCConserveMemory 0 -9 .NET Framework 4.8
Proměnná prostředí DOTNET_GCConserveMemory 0 -9 .NET 6
app.config pro rozhraní .NET Framework GCConserveMemory 0 -9 .NET Framework 4.8

Příklad souboruapp.config :


<configuration>
  <runtime>
    <GCConserveMemory enabled="5"/>
  </runtime>
</configuration>

Tip

Experimentujte s různými čísly a zjistěte, která hodnota je pro vás nejvhodnější. Začněte hodnotou od 5 do 7.