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á.
- 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ístoCOMPlus_
. PředponaCOMPlus_
ale bude i nadále fungovat. Pokud používáte předchozí verzi modulu runtime .NET, měli byste přesto použít předponuCOMPlus_
,COMPlus_gcServer
napří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 |
---|---|---|---|
runtimeconfig.json soubor/ runtimeconfig.template.json soubor |
.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 .
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
}
runtimeconfig.template.json soubor:
{
"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í stanicetrue -server |
.NET Core 1.0 |
Vlastnost MSBuild | ServerGarbageCollection |
false -pracovní stanicetrue -server |
.NET Core 1.0 |
Proměnná prostředí | COMPlus_gcServer |
0 -pracovní stanice1 -server |
.NET Core 1.0 |
Proměnná prostředí | DOTNET_gcServer |
0 -pracovní stanice1 -server |
.NET 6 |
app.config pro .NET Framework | GCServer | false -pracovní stanicetrue -server |
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
}
}
runtimeconfig.template.json soubor:
{
"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
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.Concurrent": false
}
}
}
runtimeconfig.template.json soubor:
{
"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í:
- Spřažení
- Spřažení masky
- Spřažení oblastí
- Skupiny procesorů
- Počet hald
- Pevný limit haldy
- Procento pevného limitu haldy
- Pevné limity haldy pro jednotlivé objekty
- Procento pevného limitu haldy pro jednotlivé objekty
- Vysoké procento paměti
- Zachování virtuálního počítače
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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapCount": 16
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.GC.HeapCount": 16
}
}
Tip
Pokud nastavujete možnost v 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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
}
runtimeconfig.template.json soubor:
{
"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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
}
runtimeconfig.template.json soubor:
{
"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 -invalidnítrue -zpřístupněný |
.NET 5 |
Proměnná prostředí | COMPlus_GCCpuGroup |
0 -invalidní1 -zpřístupněný |
.NET Core 1.0 |
Proměnná prostředí | DOTNET_GCCpuGroup |
0 -invalidní1 -zpřístupněný |
.NET 6 |
app.config pro .NET Framework | GCCpuGroup | false -invalidnítrue -zpřístupněný |
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 použijte název nastavení runtimeconfig.json.Include
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 1
hodnotu .
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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.NoAffinitize": true
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.GC.NoAffinitize": true
}
}
Pevný limit haldy
- Pevný limit haldy je definován jako maximální velikost potvrzení v bajtech pro haldu GC a uchovávání knih GC.
- Toto nastavení platí jenom pro 64bitové počítače.
- Pokud tento limit není nakonfigurovaný, ale proces běží v prostředí s omezením paměti, tj. uvnitř kontejneru se zadaným limitem paměti, je nastavena výchozí hodnota. Výchozí hodnota je větší než 20 MB nebo 75 % limitu paměti v kontejneru.
- Toto nastavení se ignoruje, pokud jsou nakonfigurované pevné limity haldy pro jednotlivé objekty .
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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
Tip
Pokud nastavujete možnost v 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 pevného limitu haldy
- Určuje pevný limit haldy jako procento celkové fyzické paměti. Pokud proces běží v prostředí s omezením paměti, to znamená uvnitř kontejneru se zadaným limitem paměti, celková fyzická paměť je limit paměti; jinak je to, co je na počítači k dispozici.
- Toto nastavení platí jenom pro 64bitové počítače.
- Toto nastavení se ignoruje, pokud jsou nakonfigurované pevné limity haldy pro jednotlivé objekty nebo je nakonfigurovaný pevný limit haldy.
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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
Tip
Pokud nastavujete možnost v 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í.
Pevné limity haldy pro jednotlivé objekty
Pevný limit 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_GCHeapHardLimitSOH
hodnot ,DOTNET_GCHeapHardLimitLOH
neboDOTNET_GCHeapHardLimitPOH
nastavení, musíte také zadat hodnotu proDOTNET_GCHeapHardLimitSOH
aDOTNET_GCHeapHardLimitLOH
. Pokud ne, modul runtime se nepovede inicializovat. - Výchozí hodnota je
DOTNET_GCHeapHardLimitPOH
0.DOTNET_GCHeapHardLimitSOH
aDOTNET_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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Tip
Pokud nastavujete možnost v 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 pevného limitu haldy pro jednotlivé objekty
Pevný limit 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_GCHeapHardLimitSOHPercent
hodnot ,DOTNET_GCHeapHardLimitLOHPercent
neboDOTNET_GCHeapHardLimitPOHPercent
nastavení, musíte také zadat hodnotu proDOTNET_GCHeapHardLimitSOHPercent
aDOTNET_GCHeapHardLimitLOHPercent
. Pokud ne, modul runtime se nepovede inicializovat. - Tato nastavení se ignorují, pokud
DOTNET_GCHeapHardLimitSOH
DOTNET_GCHeapHardLimitLOH
jsou zadána aDOTNET_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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Tip
Pokud nastavujete možnost v 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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Tip
Pokud nastavujete možnost v 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émutrue - v pohotovostním režimu |
.NET Core 1.0 |
Vlastnost MSBuild | RetainVMGarbageCollection |
false – vydání do operačního systémutrue - v pohotovostním režimu |
.NET Core 1.0 |
Proměnná prostředí | COMPlus_GCRetainVM |
0 – vydání do operačního systému1 - v pohotovostním režimu |
.NET Core 1.0 |
Proměnná prostředí | DOTNET_GCRetainVM |
0 – vydání do operačního systému1 - v pohotovostním režimu |
.NET 6 |
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.RetainVM": true
}
}
}
runtimeconfig.template.json soubor:
{
"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 -invalidní1 -zpřístupněný |
.NET Core 3.0 |
Proměnná prostředí | DOTNET_GCLargePages |
0 -invalidní1 -zpřístupněný |
.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 -zpřístupněný0 -invalidní |
.NET Core 1.0 |
Proměnná prostředí | DOTNET_gcAllowVeryLargeObjects |
1 -zpřístupněný0 -invalidní |
.NET 6 |
app.config pro .NET Framework | gcAllowVeryLargeObjects | 1 -zpřístupněný0 -invalidní |
.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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.
Příklady
runtimeconfig.json soubor:
{
"runtimeOptions": {
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
}
runtimeconfig.template.json soubor:
{
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
Tip
Pokud nastavujete možnost v 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
Pokud chcete místo výchozí implementace uvolňování paměti použít samostatný systém uvolňování paměti, můžete zadat cestu (v .NET 9 a novějších verzích) nebo název nativní knihovny uvolňování paměti.
Cesta
- Určuje úplnou cestu nativní knihovny uvolňování paměti, kterou modul runtime načte místo výchozí implementace uvolňování paměti. Aby byla tato lokalita zabezpečená, měla by být chráněná před potenciálně škodlivým manipulováním.
Název nastavení | Hodnoty | Zavedená verze | |
---|---|---|---|
runtimeconfig.json | System.GC.Path |
string_path | .NET 9 |
Proměnná prostředí | DOTNET_GCPath |
string_path | .NET 9 |
Název
Určuje název nativní knihovny GC, kterou modul runtime načte místo výchozí implementace GC. Chování se v rozhraní .NET 9 změnilo zavedením konfigurace cesty .
V .NET 8 a předchozích verzích:
- Pokud je zadán pouze název knihovny, musí se knihovna nacházet ve stejném adresáři jako modul runtime .NET (coreclr.dll ve Windows, libcoreclr.so v Linuxu nebo knihovně libcoreclr.dylib v OSX).
- Hodnota může být také relativní cestou, například pokud zadáte ".. \clrgc.dll" ve Windows, clrgc.dll se načte z nadřazeného adresáře adresáře modulu runtime .NET.
V .NET 9 a novějších verzích tato hodnota určuje pouze název souboru (cesty nejsou povoleny):
- .NET vyhledá název, který zadáte v adresáři, ve kterém se nachází sestavení obsahující metodu
Main
vaší aplikace. - Pokud se soubor nenajde, prohledá se adresář modulu runtime .NET.
Toto nastavení konfigurace se ignoruje, pokud je zadána konfigurace cesty .
Název nastavení | Hodnoty | Zavedená verze | |
---|---|---|---|
runtimeconfig.json | System.GC.Name |
string_name | .NET 7 |
Proměnná prostředí | COMPlus_GCName |
string_name | .NET Core 2.0 |
Proměnná prostředí | DOTNET_GCName |
string_name | .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 použijte název nastavení runtimeconfig.json.Include
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.
Dynamická přizpůsobení velikostem aplikací (DATAS)
- Nakonfiguruje systém uvolňování paměti tak, aby používal DATAS. DATAS se přizpůsobí požadavkům na paměť aplikace, což znamená, že velikost haldy aplikace by měla být přibližně úměrná dlouhodobé velikosti dat.
- Ve výchozím nastavení je povoleno od verze .NET 9.
Název nastavení | Hodnoty | Zavedená verze | |
---|---|---|---|
Proměnná prostředí | DOTNET_GCDynamicAdaptationMode |
1 -zpřístupněný0 -invalidní |
.NET 8 |
Vlastnost MSBuild | GarbageCollectionAdaptationMode |
1 -zpřístupněný0 -invalidní |
.NET 8 |
runtimeconfig.json | System.GC.DynamicAdaptationMode |
1 -zpřístupněný0 -invalidní |
.NET 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 použijte název nastavení runtimeconfig.json.Include
Příklad naleznete v tématu MSBuild vlastnosti.