Share via


Körningskonfigurationsalternativ för skräpinsamling

Den här sidan innehåller information om inställningar för .NET-runtime-skräpinsamlaren (GC). Om du försöker uppnå högsta prestanda för en app som körs kan du överväga att använda de här inställningarna. Standardinställningarna ger dock optimala prestanda för de flesta program i vanliga situationer.

Inställningar ordnas i grupper på den här sidan. Inställningarna i varje grupp används ofta tillsammans med varandra för att uppnå ett specifikt resultat.

Kommentar

  • Dessa konfigurationer skrivs endast av körningen när GC initieras (vanligtvis innebär det under processens starttid). Om du ändrar en miljövariabel när en process redan körs återspeglas inte ändringen i den processen. Inställningar som kan ändras via API:er vid körning, till exempel svarstidsnivå, utelämnas från den här sidan.
  • Eftersom GC är per process är det sällan meningsfullt att ställa in dessa konfigurationer på datornivå. Du vill till exempel inte att alla .NET-processer på en dator ska använda server GC eller samma heap hårda gräns.
  • För talvärden använder du decimal notation för inställningar i filen runtimeconfig.json eller runtimeconfig.template.json och hexadecimal notation för miljövariabelinställningar. För hexadecimala värden kan du ange dem med eller utan prefixet "0x".
  • Om du använder miljövariablerna standardiseras .NET 6- och senare versioner på prefixet DOTNET_ i stället för COMPlus_. Prefixet COMPlus_ fortsätter dock att fungera. Om du använder en tidigare version av .NET-körningen bör du fortfarande använda prefixet COMPlus_ , COMPlus_gcServertill exempel .

Sätt att ange konfigurationen

För olika versioner av .NET-körningen finns det olika sätt att ange konfigurationsvärdena. Följande tabell visar en sammanfattning.

Konfigurationsplats .NET-versioner som den här platsen gäller för Format Så tolkas det
runtimeconfig.json-fil/
runtimeconfig.template.json-fil
.NET (Core) n n tolkas som ett decimalvärde.
Miljövariabel .NET Framework, .NET (Core) 0xn eller n n tolkas som ett hexvärde i båda formaten
app.config-fil .NET Framework 0xn n tolkas som ett hexvärde1

1 Du kan ange ett värde utan prefixet 0x för en app.config-filinställning, men det rekommenderas inte. På .NET Framework 4.8+ tolkas ett värde som angetts utan prefixet 0x som hexadecimalt på grund av en bugg, men i tidigare versioner av .NET Framework tolkas det som decimaltecken. Om du vill undvika att behöva ändra konfigurationen använder du prefixet 0x när du anger ett värde i filen app.config.

Om du till exempel vill ange 12 heaps för GCHeapCount en .NET Framework-app med namnet A.exe lägger du till följande XML i filen A.exe.config .

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

För både .NET (Core) och .NET Framework kan du använda miljövariabler.

I Windows med hjälp av .NET 6 eller en senare version:

SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c

I Windows med .NET 5 eller tidigare:

SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c

På andra operativsystem:

För .NET 6 eller senare versioner:

export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c

För .NET 5 och tidigare versioner:

export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c

Om du inte använder .NET Framework kan du också ange värdet i filen runtimeconfig.json eller runtimeconfig.template.json .

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Smaker av skräpinsamling

De två viktigaste smakerna av skräpinsamling är arbetsstation GC och server GC. Mer information om skillnaderna mellan de två finns i Arbetsstation och skräpinsamling för servrar.

Underflavorna för skräpinsamling är bakgrund och icke-samtidiga.

Använd följande inställningar för att välja varianter av skräpinsamling:

Arbetsstation jämfört med server

  • Konfigurerar om programmet använder skräpinsamling för arbetsstationer eller skräpinsamling på servern.
  • Standard: Skräpinsamling för arbetsstation. Detta motsvarar att ange värdet till false.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.Server false -Arbetsstation
true -Server
.NET Core 1.0
MSBuild-egenskap ServerGarbageCollection false -Arbetsstation
true -Server
.NET Core 1.0
Miljövariabel COMPlus_gcServer 0 -Arbetsstation
1 -Server
.NET Core 1.0
Miljövariabel DOTNET_gcServer 0 -Arbetsstation
1 -Server
.NET 6
app.config för .NET Framework GCServer false -Arbetsstation
true -Server

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Projektfil:

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

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

</Project>

Bakgrunds-GC

  • Konfigurerar om skräpinsamling i bakgrunden (samtidig) är aktiverad.
  • Standard: Använd bakgrunds-GC. Detta motsvarar att ange värdet till true.
  • Mer information finns i Skräpinsamling i bakgrunden.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.Concurrent true - bakgrund GC
false - icke-samtidig GC
.NET Core 1.0
MSBuild-egenskap ConcurrentGarbageCollection true - bakgrund GC
false - icke-samtidig GC
.NET Core 1.0
Miljövariabel COMPlus_gcConcurrent 1 - bakgrund GC
0 - icke-samtidig GC
.NET Core 1.0
Miljövariabel DOTNET_gcConcurrent 1 - bakgrund GC
0 - icke-samtidig GC
.NET 6
app.config för .NET Framework gcConcurrent true - bakgrund GC
false - icke-samtidig GC

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Projektfil:

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

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

</Project>

Hantera resursanvändning

Använd följande inställningar för att hantera skräpinsamlarens minnes- och processoranvändning:

Mer information om några av de här inställningarna finns i blogginlägget Mellan arbetsstation och server GC .

Antal heap

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapCount Decimalvärde .NET Core 3.0
Miljövariabel COMPlus_GCHeapCount hexadecimalt värde .NET Core 3.0
Miljövariabel DOTNET_GCHeapCount hexadecimalt värde .NET 6
app.config för .NET Framework GCHeapCount Decimalvärde .NET Framework 4.6.2

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill begränsa antalet heaps till 16 blir värdena 16 för JSON-filen och 0x10 eller 10 för miljövariabeln.

Tillhörighetsmask

  • Anger de exakta processorer som skräpinsamlingstrådar ska använda.
  • Om GC-processortillhörighet är inaktiverad ignoreras den här inställningen.
  • Gäller endast för serverskräpinsamling.
  • Värdet är en bitmask som definierar de processorer som är tillgängliga för processen. Till exempel är ett decimalvärde på 1023 (eller ett hexadecimalt värde på 0x3FF eller 3FF om du använder miljövariabeln) 0011 1111 1111 i binär notation. Detta anger att de första 10 processorerna ska användas. Om du vill ange nästa 10 processorer, dvs. processorer 10–19, anger du ett decimalvärde på 1047552 (eller ett hexadecimalt värde på 0xFFC00 eller FFC00), vilket motsvarar ett binärt värde på 1111 1111 1100 0000 0000.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapAffinitizeMask Decimalvärde .NET Core 3.0
Miljövariabel COMPlus_GCHeapAffinitizeMask hexadecimalt värde .NET Core 3.0
Miljövariabel DOTNET_GCHeapAffinitizeMask hexadecimalt värde .NET 6
app.config för .NET Framework GCHeapAffinitizeMask Decimalvärde .NET Framework 4.6.2

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Tillhörighetsintervall

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapAffinitizeRanges Kommaavgränsad lista över processornummer eller processornummerintervall.
Unix-exempel: "1-10,12,50-52,70"
Windows-exempel: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Miljövariabel COMPlus_GCHeapAffinitizeRanges Kommaavgränsad lista över processornummer eller processornummerintervall.
Unix-exempel: "1-10,12,50-52,70"
Windows-exempel: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Miljövariabel DOTNET_GCHeapAffinitizeRanges Kommaavgränsad lista över processornummer eller processornummerintervall.
Unix-exempel: "1-10,12,50-52,70"
Windows-exempel: "0:1-10,0:12,1:50-52,1:7"
.NET 6

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

CPU-grupper

  • Konfigurerar om skräpinsamlaren använder CPU-grupper eller inte.

    När en 64-bitars Windows-dator har flera CPU-grupper, det vill sa att det finns fler än 64 processorer, utökar aktiveringen av det här elementet skräpinsamling över alla CPU-grupper. Skräpinsamlaren använder alla kärnor för att skapa och balansera högar.

    Kommentar

    Det här är ett begrepp som endast gäller Windows. I äldre Windows-versioner begränsade Windows en process till en processorgrupp. Därför använde GC bara en CPU-grupp om du inte använde den här inställningen för att aktivera flera CPU-grupper. Den här os-begränsningen hävdes i Windows 11 och Server 2022. Från och med .NET 7 använder GC som standard alla CPU-grupper när de körs på Windows 11 eller Server 2022.

  • Gäller endast för serverskräpinsamling på 64-bitars Windows-operativsystem.

  • Standard: GC sträcker sig inte över cpu-grupper. Detta motsvarar att ange värdet till 0.

  • Mer information finns i Göra CPU-konfigurationen bättre för GC på datorer med > 64 processorer på Maoni Stephens blogg.

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.CpuGroup false -Inaktiverad
true -Aktiverat
.NET 5
Miljövariabel COMPlus_GCCpuGroup 0 -Inaktiverad
1 -Aktiverat
.NET Core 1.0
Miljövariabel DOTNET_GCCpuGroup 0 -Inaktiverad
1 -Aktiverat
.NET 6
app.config för .NET Framework GCCpuGroup false -Inaktiverad
true -Aktiverat

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Kommentar

Om du vill konfigurera CLR (Common Language Runtime) för att även distribuera trådar från trådpoolen över alla CPU-grupper aktiverar du alternativet Thread_UseAllCpuGroups element . För .NET Core-appar kan du aktivera det här alternativet genom att ange värdet för DOTNET_Thread_UseAllCpuGroups miljövariabeln till 1.

Tillhörighet

  • Anger om skräpinsamlingstrådar ska mappas till processorer. Om du vill mappa en GC-tråd innebär det att den bara kan köras på sin specifika CPU. En heap skapas för varje GC-tråd.
  • Gäller endast för serverskräpinsamling.
  • Standard: Mappa skräpinsamlingstrådar med processorer. Detta motsvarar att ange värdet till false.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.NoAffinitize false – tillhörighet
true - mappa inte
.NET Core 3.0
Miljövariabel COMPlus_GCNoAffinitize 0 – tillhörighet
1 - mappa inte
.NET Core 3.0
Miljövariabel DOTNET_GCNoAffinitize 0 – tillhörighet
1 - mappa inte
.NET 6
app.config för .NET Framework GCNoAffinitize false – tillhörighet
true - mappa inte
.NET Framework 4.6.2

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Heap-gräns

  • Anger den maximala incheckningsstorleken i byte för GC-heapen och GC-bokföringen.

  • Den här inställningen gäller endast för 64-bitars datorer.

  • Den här inställningen ignoreras om gränserna per objekt-heap har konfigurerats.

  • Standardvärdet, som endast gäller i vissa fall, är större än 20 MB eller 75 % av minnesgränsen för containern. Standardvärdet gäller om:

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimit Decimalvärde .NET Core 3.0
Miljövariabel COMPlus_GCHeapHardLimit hexadecimalt värde .NET Core 3.0
Miljövariabel DOTNET_GCHeapHardLimit hexadecimalt värde .NET 6

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill ange en hård heapgräns på 200 mebibyte (MiB) skulle värdena vara 209715200 för JSON-filen och 0xC800000 eller C800000 för miljövariabeln.

Heap-gränsprocent

  • Anger den tillåtna GC-heapanvändningen som en procentandel av det totala fysiska minnet.

  • Om System.GC.HeapHardLimit också har angetts ignoreras den här inställningen.

  • Den här inställningen gäller endast för 64-bitars datorer.

  • Om processen körs i en container som har en angiven minnesgräns beräknas procentandelen som en procentandel av den minnesgränsen.

  • Den här inställningen ignoreras om gränserna per objekt-heap har konfigurerats.

  • Standardvärdet, som endast gäller i vissa fall, är större än 20 MB eller 75 % av minnesgränsen för containern. Standardvärdet gäller om:

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitPercent Decimalvärde .NET Core 3.0
Miljövariabel COMPlus_GCHeapHardLimitPercent hexadecimalt värde .NET Core 3.0
Miljövariabel DOTNET_GCHeapHardLimitPercent hexadecimalt värde .NET 6

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill begränsa heapanvändningen till 30 % blir värdena 30 för JSON-filen och 0x1E eller 1E för miljövariabeln.

Gränser per objekt-heap

Du kan ange GC:s tillåtna heapanvändning per objekt-heap. De olika heaparna är den stora objekthögen (LOH), den lilla objekthögen (SOH) och den fästa objekthögen (POH).

  • Om du anger ett värde för någon av DOTNET_GCHeapHardLimitSOHinställningarna , DOTNET_GCHeapHardLimitLOHeller DOTNET_GCHeapHardLimitPOH måste du också ange ett värde för DOTNET_GCHeapHardLimitSOH och DOTNET_GCHeapHardLimitLOH. Om du inte gör det kan körningen inte initieras.
  • Standardvärdet för DOTNET_GCHeapHardLimitPOH är 0. DOTNET_GCHeapHardLimitSOH och DOTNET_GCHeapHardLimitLOH har inte standardvärden.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitSOH Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitSOH hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitSOH hexadecimalt värde .NET 6
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitLOH Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitLOH hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitLOH hexadecimalt värde .NET 6
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitPOH Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitPOH hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitPOH hexadecimalt värde .NET 6

De här konfigurationsinställningarna har inte specifika MSBuild-egenskaper. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill ange en hård heapgräns på 200 mebibyte (MiB) skulle värdena vara 209715200 för JSON-filen och 0xC800000 eller C800000 för miljövariabeln.

Gränsprocent per objekt-heap

Du kan ange GC:s tillåtna heapanvändning per objekt-heap. De olika heaparna är den stora objekthögen (LOH), den lilla objekthögen (SOH) och den fästa objekthögen (POH).

  • Om du anger ett värde för någon av DOTNET_GCHeapHardLimitSOHPercentinställningarna , DOTNET_GCHeapHardLimitLOHPercenteller DOTNET_GCHeapHardLimitPOHPercent måste du också ange ett värde för DOTNET_GCHeapHardLimitSOHPercent och DOTNET_GCHeapHardLimitLOHPercent. Om du inte gör det kan körningen inte initieras.
  • De här inställningarna ignoreras om DOTNET_GCHeapHardLimitSOH, DOTNET_GCHeapHardLimitLOHoch DOTNET_GCHeapHardLimitPOH anges.
  • Värdet 1 innebär att GC använder 1 % av det totala fysiska minnet för objektets heap.
  • Varje värde måste vara större än noll och mindre än 100. Dessutom måste summan av de tre procentvärdena vara mindre än 100. Annars kan körningen inte initieras.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitSOHPercent Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitSOHPercent hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitSOHPercent hexadecimalt värde .NET 6
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitLOHPercent Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitLOHPercent hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitLOHPercent hexadecimalt värde .NET 6
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HeapHardLimitPOHPercent Decimalvärde .NET 5
Miljövariabel COMPlus_GCHeapHardLimitPOHPercent hexadecimalt värde .NET 5
Miljövariabel DOTNET_GCHeapHardLimitPOHPercent hexadecimalt värde .NET 6

De här konfigurationsinställningarna har inte specifika MSBuild-egenskaper. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill begränsa heapanvändningen till 30 % blir värdena 30 för JSON-filen och 0x1E eller 1E för miljövariabeln.

Hög minnesprocent

Minnesbelastning indikeras av procentandelen fysiskt minne som används. När den fysiska minnesbelastningen når 90 % blir skräpinsamlingen som standard mer aggressiv när det gäller att göra fullständiga, komprimera skräpsamlingar för att undvika växling. När minnesbelastningen är lägre än 90 % föredrar GC bakgrundssamlingar för fullständiga skräpsamlingar, som har kortare pauser men inte minskar den totala heapstorleken med mycket. På datorer med en betydande mängd minne (80 GB eller mer) är standardtröskelvärdet för belastning mellan 90 % och 97 %.

Tröskelvärdet för hög minnesbelastning kan justeras med DOTNET_GCHighMemPercent miljövariabeln eller System.GC.HighMemoryPercent JSON-konfigurationsinställningen. Överväg att justera tröskelvärdet om du vill kontrollera heapstorleken. För den dominerande processen på en dator med 64 GB minne är det till exempel rimligt att GC börjar reagera när det finns 10 % tillgängligt minne. Men för mindre processer, till exempel en process som bara förbrukar 1 GB minne, kan GC bekvämt köras med mindre än 10 % tillgängligt minne. För dessa mindre processer bör du överväga att ange tröskelvärdet högre. Å andra sidan, om du vill att större processer ska ha mindre heapstorlekar (även om det finns gott om fysiskt minne tillgängligt), är en sänkning av detta tröskelvärde ett effektivt sätt för GC att reagera tidigare för att komprimera ner heapen.

Kommentar

För processer som körs i en container tar GC hänsyn till det fysiska minnet baserat på containergränsen.

Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.HighMemoryPercent Decimalvärde .NET 5
Miljövariabel COMPlus_GCHighMemPercent hexadecimalt värde .NET Core 3.0
.NET Framework 4.7.2
Miljövariabel DOTNET_GCHighMemPercent hexadecimalt värde .NET 6

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill ange tröskelvärdet för högt minne till 75 % blir värdena 75 för JSON-filen och 0x4B eller 4B för miljövariabeln.

Behålla virtuell dator

  • Konfigurerar om segment som ska tas bort placeras i en väntelista för framtida användning eller släpps tillbaka till operativsystemet (OS).
  • Standard: Versionssegment tillbaka till operativsystemet. Detta motsvarar att ange värdet till false.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.RetainVM false – release to OS
true - sätta i vänteläge
.NET Core 1.0
MSBuild-egenskap RetainVMGarbageCollection false – release to OS
true - sätta i vänteläge
.NET Core 1.0
Miljövariabel COMPlus_GCRetainVM 0 – release to OS
1 - sätta i vänteläge
.NET Core 1.0
Miljövariabel DOTNET_GCRetainVM 0 – release to OS
1 - sätta i vänteläge
.NET 6

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Projektfil:

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

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

</Project>

Stora sidor

  • Anger om stora sidor ska användas när en heap hård gräns anges.
  • Standard: Använd inte stora sidor när en heap hård gräns har angetts. Detta motsvarar att ange värdet till 0.
  • Det här är en experimentell inställning.
Inställningsnamn Värden Version introducerad
runtimeconfig.json Saknas Saknas Saknas
Miljövariabel COMPlus_GCLargePages 0 -Inaktiverad
1 -Aktiverat
.NET Core 3.0
Miljövariabel DOTNET_GCLargePages 0 -Inaktiverad
1 -Aktiverat
.NET 6

Tillåt stora objekt

  • Konfigurerar stöd för skräpinsamlare på 64-bitarsplattformar för matriser som är större än 2 GIGABYTE (GB) i total storlek.
  • Standard: GC stöder matriser som är större än 2 GB. Detta motsvarar att ange värdet till 1.
  • Det här alternativet kan bli föråldrat i en framtida version av .NET.
Inställningsnamn Värden Version introducerad
runtimeconfig.json Saknas Saknas Saknas
Miljövariabel COMPlus_gcAllowVeryLargeObjects 1 -Aktiverat
0 -Inaktiverad
.NET Core 1.0
Miljövariabel DOTNET_gcAllowVeryLargeObjects 1 -Aktiverat
0 -Inaktiverad
.NET 6
app.config för .NET Framework gcAllowVeryLargeObjects 1 -Aktiverat
0 -Inaktiverad
Microsoft .NET Framework 4.5

Tröskelvärde för stora objekts heap

  • Anger tröskelvärdets storlek, i byte, som gör att objekt hamnar på den stora objekthögen (LOH).
  • Standardtröskelvärdet är 85 000 byte.
  • Värdet du anger måste vara större än standardtröskelvärdet.
  • Värdet kan begränsas av körningen till den maximala möjliga storleken för den aktuella konfigurationen. Du kan kontrollera värdet som används vid körning via API:et GC.GetConfigurationVariables() .
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.LOHThreshold Decimalvärde .NET Core 1.0
Miljövariabel COMPlus_GCLOHThreshold hexadecimalt värde .NET Core 1.0
Miljövariabel DOTNET_GCLOHThreshold hexadecimalt värde .NET 6
app.config för .NET Framework GCLOHThreshold Decimalvärde .NET Framework 4.8

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel

runtimeconfig.json-fil :

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

runtimeconfig.template.json-fil :

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

Dricks

Om du anger alternativet i runtimeconfig.json anger du ett decimalvärde. Om du anger alternativet som en miljövariabel anger du ett hexadecimalt värde. Om du till exempel vill ange en tröskelvärdesstorlek på 120 000 byte blir värdena 120000 för JSON-filen och 0x1D4C0 eller 1D4C0 för miljövariabeln.

Fristående GC

  • Anger namnet på ett inbyggt GC-bibliotek som körningen läser in i stället för GC-standardimplementeringen. Det här interna biblioteket måste finnas i samma katalog som .NET-körningen (coreclr.dll i Windows, libcoreclr.so på Linux).
Inställningsnamn Värden Version introducerad
runtimeconfig.json Saknas Saknas Saknas
Miljövariabel COMPlus_GCName string_path .NET Core 2.0
Miljövariabel DOTNET_GCName string_path .NET 6

Spara minne

  • Konfigurerar skräpinsamlaren för att spara minne på bekostnad av vanligare skräpsamlingar och eventuellt längre paustider.
  • Standardvärdet är 0 – det innebär ingen ändring.
  • Förutom standardvärdet 0 är värdena mellan 1 och 9 (inklusive) giltiga. Ju högre värde, desto mer försöker skräpinsamlaren spara minne och därmed hålla högen liten.
  • Om värdet inte är noll komprimeras den stora objekthögen automatiskt om den har för mycket fragmentering.
Inställningsnamn Värden Version introducerad
runtimeconfig.json System.GC.ConserveMemory 0 - 9 .NET 6
Miljövariabel COMPlus_GCConserveMemory 0 -9 .NET Framework 4.8
Miljövariabel DOTNET_GCConserveMemory 0 -9 .NET 6
app.config för .NET Framework GCConserveMemory 0 -9 .NET Framework 4.8

Den här konfigurationsinställningen har ingen specifik MSBuild-egenskap. Du kan dock lägga till ett RuntimeHostConfigurationOption MSBuild-objekt i stället. Använd inställningsnamnet runtimeconfig.json som värdet för attributet Include . Ett exempel finns i MSBuild-egenskaper.

Exempel på app.config-fil :


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

Dricks

Experimentera med olika tal för att se vilket värde som fungerar bäst för dig. Börja med ett värde mellan 5 och 7.