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 maximálního výkonu spuštěné aplikace, zvažte použití těchto nastavení. Výchozí hodnoty však poskytují optimální výkon pro většinu aplikací v typický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:

  • Tyto konfigurace jsou při inicializaci GC čteny pouze modulem runtime (obvykle to znamená během doby spuštění procesu). Pokud změníte proměnnou prostředí, když už proces běží, změna se v daném procesu neprojeví. Nastavení, které je možné změnit prostřednictvím rozhraní API za běhu, jako je například úroveň latence, se na této stránce vynechávají.
  • Vzhledem k tomu, že GC je pro každý proces, dává zřídka smysl nastavit tyto konfigurace na úrovni počítače. Například nechcete, aby každý proces .NET na počítači používal serverový GC nebo stejný pevný limit haldy.
  • Pro číselné hodnoty použijte desetinnou notaci pro nastavení v souboru runtimeconfig.json nebo runtimeconfig.template.json a šestnáctkové notace pro nastavení proměnné prostředí. U šestnáctkových hodnot můžete zadat předponu 0x nebo bez nich.
  • Pokud používáte proměnné prostředí, .NET 6 a novější verze standardizují předponu DOTNET_ místo COMPlus_. Předpona COMPlus_ ale bude i nadále fungovat. Pokud používáte předchozí verzi modulu runtime .NET, měli byste přesto použít předponu COMPlus_ , COMPlus_gcServernapříklad .

Způsoby určení konfigurace

Pro různé verze modulu runtime .NET existují různé způsoby, jak zadat hodnoty konfigurace. Následující tabulka obsahuje souhrn.

Umístění konfigurace Verze .NET, na které se toto umístění vztahuje Formáty Jak se interpretuje
soubor runtimeconfig.json/
runtimeconfig.template.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á hodnota v obou formátech.
soubor app.config .NET Framework 0xn n se interpretuje jako šestnáctková hodnota1.

1 Můžete zadat hodnotu bez předpony 0x pro nastavení souboru app.config, ale nedoporučuje se. V rozhraní .NET Framework 4.8+ je kvůli chybě interpretována hodnota 0x bez předpony jako šestnáctková, ale v předchozích verzích rozhraní .NET Framework je interpretována jako desítková. 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 hald pro GCHeapCount aplikaci .NET Framework s názvem A.exe, přidejte do souboru A.exe.config následující KÓD 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 pomocí .NET 6 nebo novější verze:

SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c

Ve Windows pomocí .NET 5 nebo starších verzí:

SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c

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

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

export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c

Pro .NET 5 a starší verze:

export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c

Pokud nepoužíváte rozhraní .NET Framework, můžete také nastavit hodnotu v souboru runtimeconfig.json nebo runtimeconfig.template.json .

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

{
  "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 server 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 na pozadí a nejsou souběžné.

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

Pracovní stanice vs. server

  • Konfiguruje, zda 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 runtimeconfig.template.json :

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

Soubor projektu:

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

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

</Project>

Uvolňování paměti pozadí

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

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

{
   "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

  • Omezuje počet hald vytvořených uvolňováním paměti.
  • Platí pouze pro uvolňování paměti serveru.
  • Pokud je povolena spřažení procesoru GC, což je výchozí nastavení počtu hald, n spřažení spřažení GC haldy nebo vláken na první n procesory. (Pomocí nastavení masky spřažení nebo rozsahů spřažení určete, které procesory se mají spřažení provést.)
  • Pokud je spřažení procesoru GC zakázané, toto nastavení omezuje počet hald GC.
  • Další informace naleznete v poznámkách GCHeapCount.
Název nastavení Hodnoty Zavedená 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 .NET Framework GCHeapCount desetinná hodnota .NET Framework 4.6.2

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud například chcete omezit počet hald na 16, budou hodnoty 16 pro soubor JSON 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 GC zakázané, bude toto nastavení ignorováno.
  • 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ů. Pokud chcete určit dalších 10 procesorů, tj. procesory 10–19, zadejte desetinnou hodnotu 1047552 (nebo šestnáctkovou hodnotu 0xFFC00 nebo FFC00), která je ekvivalentní binární hodnotě 1111 1111 1100 0000 0000.
Název nastavení Hodnoty Zavedená 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 .NET Framework GCHeapAffinitizeMask desetinná hodnota .NET Framework 4.6.2

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Spřažení oblastí

  • Určuje seznam procesorů, které se mají použít pro vlákna uvolňování paměti.
  • Toto nastavení je podobné system.GC.HeapAffinitizeMask, s výjimkou toho, že umožňuje zadat více než 64 procesorů.
  • V případě operačních systémů Windows zadejte předponu čísla procesoru nebo rozsahu odpovídající skupinou procesoru, například 0:1-10,0:12,1:50-52,1:7". Pokud ve skutečnosti nemáte více než 1 skupinu procesorů, nemůžete toto nastavení použít. Musíte použít nastavení Maska spřažení. A zadaná čísla jsou v této skupině, což znamená, že nemůže být >= 64.
  • V případě operačních systémů Linux, kde koncept skupiny procesorů neexistuje, můžete použít toto nastavení i nastavení masky spřažení k určení stejných rozsahů. Místo 0:1-10 zadejte 1-10, protože nemusíte zadávat index skupiny.
  • Pokud je spřažení procesoru GC zakázané, bude toto nastavení ignorováno.
  • Platí pouze pro uvolňování paměti serveru.
  • Další informace naleznete v tématu Lepší konfigurace procesoru pro GC na počítačích s > 64 procesory na blogu Maoni Stephens.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.HeapAffinitizeRanges Čárkami oddělený seznam čísel procesorů nebo rozsahů čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Proměnná prostředí COMPlus_GCHeapAffinitizeRanges Čárkami oddělený seznam čísel procesorů nebo rozsahů čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Proměnná prostředí DOTNET_GCHeapAffinitizeRanges Čárkami oddělený seznam čísel procesorů nebo rozsahů čísel procesoru
Příklad unixu: "1-10,12,50-52,70"
Příklad Windows: "0:1-10,0:12,1:50-52,1:7"
.NET 6

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Skupiny procesorů

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

    Pokud má 64bitový počítač s Windows více skupin procesorů, to znamená, že existuje více než 64 procesorů, což tento prvek rozšiřuje 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 vyrovnávání hald.

    Poznámka:

    Jedná se o koncept jen pro Windows. Ve starších verzích Windows omezil Systém Windows proces na jednu skupinu procesoru. Uvolňování paměti proto používalo pouze jednu skupinu procesorů, pokud jste toto nastavení nepoužili k povolení více skupin procesoru. Toto omezení operačního systému bylo ve Windows 11 a Serveru 2022 zrušeno. Počínaje rozhraním .NET 7 používá uvolňování paměti ve výchozím nastavení všechny skupiny procesorů při spuštění ve Windows 11 nebo Serveru 2022.

  • 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 nerozšiřuje mezi skupinami procesoru. To je ekvivalentní nastavení hodnoty na 0.

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

Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.CpuGroup false -Zakázán
true -Povoleno
.NET 5
Proměnná prostředí COMPlus_GCCpuGroup 0 -Zakázán
1 -Povoleno
.NET Core 1.0
Proměnná prostředí DOTNET_GCCpuGroup 0 -Zakázán
1 -Povoleno
.NET 6
app.config pro .NET Framework GCCpuGroup false -Zakázán
true -Povoleno

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

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. Spřažení vlákna uvolňování paměti znamená, že může běžet pouze na konkrétním procesoru. Pro každé vlákno GC 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 ekvivalentní nastavení hodnoty na false.
Název nastavení Hodnoty Zavedená 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 .NET Framework GCNoAffinitize false - spřažení
true - spřažení
.NET Framework 4.6.2

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Limit haldy

  • Určuje maximální velikost potvrzení v bajtech pro haldu GC a účetnictví 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á platí jenom v určitých případech, je větší než 20 MB nebo 75 % limitu paměti v kontejneru. Výchozí hodnota platí, pokud:

Název nastavení Hodnoty Zavedená 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

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud například chcete 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 GC 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á platí jenom v určitých případech, je větší než 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

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Tip

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

Omezení haldy pro jednotlivé objekty

Povolené použití haldy GC můžete zadat 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 nepovede 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

Tato nastavení konfigurace nemají specifické vlastnosti nástroje MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Tip

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

Limit procent na haldu pro jednotlivé objekty

Povolené použití haldy GC můžete zadat 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 nepovede inicializovat.
  • Tato nastavení se ignorují, pokud DOTNET_GCHeapHardLimitSOHDOTNET_GCHeapHardLimitLOHjsou zadána a DOTNET_GCHeapHardLimitPOH jsou zadána.
  • Hodnota 1 znamená, že GC používá 1% celkové fyzické paměti pro haldu daného objektu.
  • 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. Jinak 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

Tato nastavení konfigurace nemají specifické vlastnosti nástroje MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Tip

Pokud nastavujete možnost v souboru runtimeconfig.json, zadejte desetinnou hodnotu. Pokud možnost nastavujete jako proměnnou prostředí, zadejte šestnáctkovou hodnotu. Pokud například chcete 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 indikováno 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 nastavením DOTNET_GCHighMemPercent proměnné prostředí nebo System.GC.HighMemoryPercent konfigurace JSON. Pokud chcete řídit velikost haldy, zvažte úpravu prahové hodnoty. Například u dominantního procesu na počítači s 64 GB paměti je vhodné, aby GC začal reagovat, když je k dispozici 10 % paměti. Ale u menších procesů, například u procesu, 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 dostatek fyzické paměti), snížení této prahové hodnoty je efektivní způsob, jak GC reagovat dříve, aby komprimovala haldu dolů.

Poznámka:

Pro procesy spuštěné v kontejneru GC bere v úvahu 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

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Tip

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

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

  • Konfiguruje, jestli se segmenty, které mají být odstraněny, umístí do pohotovostního seznamu pro budoucí použití nebo se uvolní zpět do operačního systému (OS).
  • Výchozí: 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í do operačního systému
true - v pohotovostním režimu
.NET Core 1.0
Vlastnost MSBuild RetainVMGarbageCollection false – vydání do operačního systému
true - v pohotovostním režimu
.NET Core 1.0
Proměnná prostředí COMPlus_GCRetainVM 0 – vydání do operačního systému
1 - v pohotovostním režimu
.NET Core 1.0
Proměnná prostředí DOTNET_GCRetainVM 0 – vydání do operačního systému
1 - v pohotovostním režimu
.NET 6

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Soubor projektu:

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

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

</Project>

Velké stránky

  • Určuje, jestli mají být při nastavení pevného limitu haldy použity velké stránky.
  • 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
Proměnná prostředí COMPlus_GCLargePages 0 -Zakázán
1 -Povoleno
.NET Core 3.0
Proměnná prostředí DOTNET_GCLargePages 0 -Zakázán
1 -Povoleno
.NET 6

Povolit velké objekty

  • Konfiguruje podporu uvolňování paměti na 64bitových platformách pro pole, která mají celkovou velikost větší než 2 gigabajty (GB).
  • Výchozí hodnota: 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
Proměnná prostředí COMPlus_gcAllowVeryLargeObjects 1 -Povoleno
0 -Zakázán
.NET Core 1.0
Proměnná prostředí DOTNET_gcAllowVeryLargeObjects 1 -Povoleno
0 -Zakázán
.NET 6
app.config pro .NET Framework gcAllowVeryLargeObjects 1 -Povoleno
0 -Zakázán
.NET Framework 4.5

Prahová hodnota haldy velkého objektu

  • Určuje velikost prahové hodnoty v bajtech, která způsobí, že objekty přejdou na velkou haldu objektu (LOH).
  • Výchozí prahová hodnota je 85 000 bajtů.
  • Zadaná hodnota musí být větší než výchozí prahová hodnota.
  • Hodnota může být omezena modulem runtime na maximální možnou velikost aktuální konfigurace. Hodnotu, kterou používáte za běhu, můžete zkontrolovat prostřednictvím GC.GetConfigurationVariables() rozhraní API.
Název nastavení Hodnoty Zavedená 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 .NET Framework GCLOHThreshold desetinná hodnota .NET Framework 4.8

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Příklady

soubor runtimeconfig.json :

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

soubor runtimeconfig.template.json :

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

Tip

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

Samostatný GC

  • Určuje název nativní knihovny GC, kterou modul runtime načte místo výchozí implementace GC. Tato nativní knihovna se musí nacházet ve stejném adresáři jako modul runtime .NET (coreclr.dll ve Windows, libcoreclr.so v Linuxu).
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json 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

  • Nakonfiguruje systém uvolňování paměti tak, aby ušetřil paměť na úkor častějších uvolňování paměti a případně i delších časů pozastavení.
  • Výchozí hodnota je 0 – neznamená 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 uvolňování paměti se snaží šetřit paměť, a tak zachovat haldu malou.
  • Pokud je hodnota nenulová, velká halda objektu se zkomprimuje automaticky, pokud má příliš mnoho fragmentace.
Název nastavení Hodnoty Zavedená verze
runtimeconfig.json System.GC.ConserveMemory 0 - 9 .NET 6
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 .NET Framework GCConserveMemory 0 -9 .NET Framework 4.8

Toto nastavení konfigurace nemá konkrétní vlastnost MSBuild. Místo toho však můžete přidat RuntimeHostConfigurationOption položku NÁSTROJE MSBuild. Jako hodnotu atributu Include použijte název nastavení runtimeconfig.json. Příklad naleznete v tématu MSBuild vlastnosti.

Ukázkový soubor app.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.