Atık toplama için çalışma zamanı yapılandırma seçenekleri

Bu sayfa .NET çalışma zamanı çöp toplayıcısı (GC) için ayarlar hakkında bilgi içerir. Çalışan bir uygulamanın en yüksek performansını elde etmeye çalışıyorsanız bu ayarları kullanmayı göz önünde bulundurun. Ancak, varsayılanlar tipik durumlarda çoğu uygulama için en iyi performansı sağlar.

Ayarlar bu sayfada gruplar halinde düzenlenmiştir. Her gruptaki ayarlar genellikle belirli bir sonuç elde etmek için birbirleriyle birlikte kullanılır.

Dekont

  • Bu yapılandırmalar yalnızca GC başlatıldığında çalışma zamanı tarafından okunur (bu genellikle işlem başlatma zamanında olduğu anlamına gelir). Bir işlem zaten çalışırken ortam değişkenini değiştirirseniz, değişiklik bu işleme yansıtılmayacaktır. Çalışma zamanında API'ler aracılığıyla değiştirilebilen gecikme düzeyi gibi Ayarlar bu sayfadan atlanır.
  • GC işlem başına olduğundan, bu yapılandırmaları makine düzeyinde ayarlamak nadiren mantıklıdır. Örneğin, bir makinedeki her .NET işleminin sunucu GC'sini veya aynı yığın sabit sınırını kullanmasını istemezsiniz.
  • Sayı değerleri için runtimeconfig.json veya runtimeconfig.template.json dosyasındaki ayarlar için ondalık gösterimi ve ortam değişkeni ayarları için onaltılık gösterimi kullanın. Onaltılık değerler için, bunları "0x" ön eki ile veya olmadan belirtebilirsiniz.
  • Ortam değişkenlerini kullanıyorsanız , .NET 6 ve sonraki sürümleri yerine ön ekte DOTNET_COMPlus_standartlaştırılır. Ancak ön COMPlus_ ek çalışmaya devam eder. .NET çalışma zamanının önceki bir sürümünü kullanıyorsanız, yine de ön ekini COMPlus_ kullanmanız gerekir, örneğin. COMPlus_gcServer

Yapılandırmayı belirtme yolları

.NET çalışma zamanının farklı sürümleri için yapılandırma değerlerini belirtmenin farklı yolları vardır. Aşağıdaki tabloda bir özet gösterilmektedir.

Yapılandırma konumu Bu konumun geçerli olduğu .NET sürümleri Biçimler Nasıl yorumlanır?
runtimeconfig.json file/
runtimeconfig.template.json dosyası
.NET (Core) n n ondalık değer olarak yorumlanır.
Ortam değişkeni .NET Framework, .NET (Core) 0xn veya n n, iki biçimde de onaltılık değer olarak yorumlanır
app.config dosyası .NET Framework 0xn n, onaltılık değer1 olarak yorumlanır

1 App.config dosya ayarı için ön ek olmadan 0x bir değer belirtebilirsiniz, ancak önerilmez. .NET Framework 4.8+'da, bir hata nedeniyle ön ek olmadan 0x belirtilen bir değer onaltılık olarak yorumlanır, ancak önceki .NET Framework sürümlerinde ondalık olarak yorumlanır. Yapılandırmanızı değiştirmek zorunda kalmamak için app.config dosyanızda bir değer belirtirken ön eki kullanın 0x .

Örneğin, A.exe adlı bir .NET Framework uygulaması için 12 yığın belirtmek için GCHeapCount A.exe.config dosyasına aşağıdaki XML'yi ekleyin.

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

Hem .NET (Core) hem de .NET Framework için ortam değişkenlerini kullanabilirsiniz.

.NET 6 veya sonraki bir sürümü kullanan Windows'ta:

SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c

.NET 5 veya önceki sürümleri kullanan Windows'ta:

SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c

Diğer işletim sistemlerinde:

.NET 6 veya sonraki sürümleri için:

export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c

.NET 5 ve önceki sürümler için:

export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c

.NET Framework kullanmıyorsanız, değeri runtimeconfig.json veya runtimeconfig.template.json dosyasında da ayarlayabilirsiniz.

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Çöp toplamanın tatları

Çöp toplamanın iki ana türü iş istasyonu GC ve sunucu GC'dir. İkisi arasındaki farklar hakkında daha fazla bilgi için bkz . İş istasyonu ve sunucu çöp toplama.

Atık toplamanın alt filtişi arka plan ve eşzamanlı değildir.

Çöp toplamanın çeşitlerini seçmek için aşağıdaki ayarları kullanın:

İş istasyonu ve sunucu karşılaştırması

  • Uygulamanın iş istasyonu çöp toplama mı yoksa sunucu çöp toplama mı kullandığını yapılandırılır.
  • Varsayılan: İş istasyonu çöp toplama. Bu, değerini falseolarak ayarlamakla eşdeğerdir.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.Server false -Workstation
true -Sunucu
.NET Core 1.0
MSBuild özelliği ServerGarbageCollection false -Workstation
true -Sunucu
.NET Core 1.0
Ortam değişkeni COMPlus_gcServer 0 -Workstation
1 -Sunucu
.NET Core 1.0
Ortam değişkeni DOTNET_gcServer 0 -Workstation
1 -Sunucu
.NET 6
.NET Framework için app.config GCServer false -Workstation
true -Sunucu

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Proje dosyası:

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

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

</Project>

Arka Plan GC

  • Arka plan (eşzamanlı) çöp toplamanın etkinleştirilip etkinleştirilmediğini yapılandırılır.
  • Varsayılan: Arka plan GC kullanın. Bu, değerini trueolarak ayarlamakla eşdeğerdir.
  • Daha fazla bilgi için bkz . Arka plan çöp toplama.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.Concurrent true - arka plan GC
false - eşzamanlı olmayan GC
.NET Core 1.0
MSBuild özelliği ConcurrentGarbageCollection true - arka plan GC
false - eşzamanlı olmayan GC
.NET Core 1.0
Ortam değişkeni COMPlus_gcConcurrent 1 - arka plan GC
0 - eşzamanlı olmayan GC
.NET Core 1.0
Ortam değişkeni DOTNET_gcConcurrent 1 - arka plan GC
0 - eşzamanlı olmayan GC
.NET 6
.NET Framework için app.config gcConcurrent true - arka plan GC
false - eşzamanlı olmayan GC

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Proje dosyası:

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

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

</Project>

Kaynak kullanımını yönetme

Atık toplayıcının bellek ve işlemci kullanımını yönetmek için aşağıdaki ayarları kullanın:

Bu ayarlardan bazıları hakkında daha fazla bilgi için bkz. İş istasyonu ve sunucu GC blog girdisi arasında orta zemin.

Yığın sayısı

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapCount ondalık değer .NET Core 3.0
Ortam değişkeni COMPlus_GCHeapCount onaltılık değer .NET Core 3.0
Ortam değişkeni DOTNET_GCHeapCount onaltılık değer .NET 6
.NET Framework için app.config GCHeapCount ondalık değer .NET Framework 4.6.2

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, yığın sayısını 16 ile sınırlamak için değerler JSON dosyası için 16, ortam değişkeni için 0x10 veya 10 olur.

Maskeyi affinitize edin

  • Çöp toplayıcı iş parçacıklarının kullanması gereken tam işlemcileri belirtir.
  • GC işlemci benzitesi devre dışı bırakılırsa, bu ayar yoksayılır.
  • Yalnızca sunucu çöp toplama için geçerlidir.
  • Değer, işlem için kullanılabilen işlemcileri tanımlayan bir bit maskesidir. Örneğin, ikili gösteriminde 1023 ondalık değeri (veya 0x3FF onaltılık değeri veya ortam değişkenini kullanıyorsanız 3FF) 0011 1111 1111'dir. Bu, ilk 10 işlemcinin kullanılacağını belirtir. Sonraki 10 işlemciyi (yani 10-19) belirtmek için, 1111 1111 1100 0000 0000 ikili değerine eşdeğer olan 1047552 ondalık değerini (veya 0xFFC00 veya FFC00'ün onaltılık değerini) belirtin.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapAffinitizeMask ondalık değer .NET Core 3.0
Ortam değişkeni COMPlus_GCHeapAffinitizeMask onaltılık değer .NET Core 3.0
Ortam değişkeni DOTNET_GCHeapAffinitizeMask onaltılık değer .NET 6
.NET Framework için app.config GCHeapAffinitizeMask ondalık değer .NET Framework 4.6.2

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Aralıkları affinitize edin

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapAffinitizeRanges İşlemci numaralarının veya işlemci sayı aralıklarının virgülle ayrılmış listesi.
Unix örneği: "1-10,12,50-52,70"
Windows örneği: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Ortam değişkeni COMPlus_GCHeapAffinitizeRanges İşlemci numaralarının veya işlemci sayı aralıklarının virgülle ayrılmış listesi.
Unix örneği: "1-10,12,50-52,70"
Windows örneği: "0:1-10,0:12,1:50-52,1:7"
.NET Core 3.0
Ortam değişkeni DOTNET_GCHeapAffinitizeRanges İşlemci numaralarının veya işlemci sayı aralıklarının virgülle ayrılmış listesi.
Unix örneği: "1-10,12,50-52,70"
Windows örneği: "0:1-10,0:12,1:50-52,1:7"
.NET 6

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

CPU grupları

  • Çöp toplayıcının CPU gruplarını kullanıp kullanmayacağını yapılandırılır.

    Bir 64 bit Windows bilgisayarda birden çok CPU grubu olduğunda, yani 64'ten fazla işlemci olduğunda, bu öğe etkinleştirildiğinde tüm CPU grupları arasında çöp toplama genişletilir. Çöp toplayıcı, yığınları oluşturmak ve dengelemek için tüm çekirdekleri kullanır.

    Dekont

    Bu yalnızca Windows kavramıdır. Eski Windows sürümlerinde, Windows bir işlemi bir CPU grubuyla sınırlandırmıştı. Bu nedenle GC, birden çok CPU grubunu etkinleştirmek için bu ayarı kullanmadığınız sürece yalnızca bir CPU grubu kullanmıştı. Bu işletim sistemi sınırlaması Windows 11 ve Server 2022'de kaldırıldı. Ayrıca, .NET 7'den başlayarak GC, Windows 11 veya Server 2022'de çalışırken varsayılan olarak tüm CPU gruplarını kullanır.

  • Yalnızca 64 bit Windows işletim sistemlerinde sunucu çöp toplama için geçerlidir.

  • Varsayılan: GC, CPU grupları arasında genişletilmez. Bu, değerini 0olarak ayarlamakla eşdeğerdir.

  • Daha fazla bilgi için Maoni Stephens'ın blogundaki 64 CPU'ya sahip > makinelerde GC için CPU yapılandırmasını daha iyi hale getirme bölümüne bakın.

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.CpuGroup false -Devre dışı
true -Etkin
.NET 5
Ortam değişkeni COMPlus_GCCpuGroup 0 -Devre dışı
1 -Etkin
.NET Core 1.0
Ortam değişkeni DOTNET_GCCpuGroup 0 -Devre dışı
1 -Etkin
.NET 6
.NET Framework için app.config GCCpuGroup false -Devre dışı
true -Etkin

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Dekont

ortak dil çalışma zamanını (CLR) iş parçacığı havuzundan iş parçacıklarını tüm CPU gruplarına dağıtacak şekilde yapılandırmak için Thread_UseAllCpuGroups öğesi seçeneğini etkinleştirin. .NET Core uygulamaları için ortam değişkeninin DOTNET_Thread_UseAllCpuGroups1değerini olarak ayarlayarak bu seçeneği etkinleştirebilirsiniz.

Affinitize

  • atık toplama iş parçacıklarının işlemcilerle ilişkilendirilip birleştirmeyeceğini belirtir. Gc iş parçacığını affinitize etmek, yalnızca belirli BIR CPU üzerinde çalışabileceği anlamına gelir. Her GC iş parçacığı için bir yığın oluşturulur.
  • Yalnızca sunucu çöp toplama için geçerlidir.
  • Varsayılan: İşlemcilerle atık toplama iş parçacıklarını affinitize edin. Bu, değerini falseolarak ayarlamakla eşdeğerdir.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.NoAffinitize false - affinitize
true - affinitize etmeyin
.NET Core 3.0
Ortam değişkeni COMPlus_GCNoAffinitize 0 - affinitize
1 - affinitize etmeyin
.NET Core 3.0
Ortam değişkeni DOTNET_GCNoAffinitize 0 - affinitize
1 - affinitize etmeyin
.NET 6
.NET Framework için app.config GCNoAffinitize false - affinitize
true - affinitize etmeyin
.NET Framework 4.6.2

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Yığın sınırı

  • GC yığını ve GC muhasebesi için bayt cinsinden en büyük işleme boyutunu belirtir.

  • Bu ayar yalnızca 64 bit bilgisayarlar için geçerlidir.

  • Nesne başına yığın sınırları yapılandırılırsa bu ayar yoksayılır.

  • Yalnızca belirli durumlarda geçerli olan varsayılan değer, kapsayıcıdaki bellek sınırının 20 MB veya %75'i kadardır. Varsayılan değer şu durumlar için geçerlidir:

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimit ondalık değer .NET Core 3.0
Ortam değişkeni COMPlus_GCHeapHardLimit onaltılık değer .NET Core 3.0
Ortam değişkeni DOTNET_GCHeapHardLimit onaltılık değer .NET 6

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, 200 mebibayt (MiB) yığın sabit sınırı belirtmek için, değerler JSON dosyası için 209715200 ve ortam değişkeni için 0xC800000 veya C800000 olabilir.

Yığın sınırı yüzdesi

  • İzin verilebilen GC yığını kullanımını, toplam fiziksel belleğin yüzdesi olarak belirtir.

  • System.GC.HeapHardLimit de ayarlanırsa, bu ayar yoksayılır.

  • Bu ayar yalnızca 64 bit bilgisayarlar için geçerlidir.

  • İşlem belirtilen bellek sınırına sahip bir kapsayıcı içinde çalışıyorsa, yüzde, bu bellek sınırının yüzdesi olarak hesaplanır.

  • Nesne başına yığın sınırları yapılandırılırsa bu ayar yoksayılır.

  • Yalnızca belirli durumlarda geçerli olan varsayılan değer, kapsayıcıdaki bellek sınırının 20 MB veya %75'i kadardır. Varsayılan değer şu durumlar için geçerlidir:

    • İşlem, belirtilen bellek sınırına sahip bir kapsayıcı içinde çalışıyor.
    • System.GC.HeapHardLimit ayarlanmadı.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitPercent ondalık değer .NET Core 3.0
Ortam değişkeni COMPlus_GCHeapHardLimitPercent onaltılık değer .NET Core 3.0
Ortam değişkeni DOTNET_GCHeapHardLimitPercent onaltılık değer .NET 6

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, yığın kullanımını %30 ile sınırlamak için değerler JSON dosyası için 30, ortam değişkeni için 0x1E veya 1E olur.

Nesne başına yığın sınırları

GC'nin izin verilebilen yığın kullanımını nesne başına yığın temelinde belirtebilirsiniz. Farklı yığınlar büyük nesne yığını (LOH), küçük nesne yığını (SOH) ve sabitlenmiş nesne yığınıdır (POH).

  • , DOTNET_GCHeapHardLimitLOHveya ayarlarından herhangi biri DOTNET_GCHeapHardLimitSOHiçin bir değer belirtirseniz ve DOTNET_GCHeapHardLimitLOHiçin DOTNET_GCHeapHardLimitSOH de bir değer belirtmeniz DOTNET_GCHeapHardLimitPOH gerekir. Aksi takdirde çalışma zamanı başlatılamaz.
  • için DOTNET_GCHeapHardLimitPOH varsayılan değer 0'dır. DOTNET_GCHeapHardLimitSOH ve DOTNET_GCHeapHardLimitLOH varsayılan değerleri yoktur.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitSOH ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitSOH onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitSOH onaltılık değer .NET 6
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitLOH ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitLOH onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitLOH onaltılık değer .NET 6
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitPOH ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitPOH onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitPOH onaltılık değer .NET 6

Bu yapılandırma ayarlarının belirli MSBuild özellikleri yoktur. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, 200 mebibayt (MiB) yığın sabit sınırı belirtmek için, değerler JSON dosyası için 209715200 ve ortam değişkeni için 0xC800000 veya C800000 olabilir.

Nesne başına yığın sınırı yüzdeleri

GC'nin izin verilebilen yığın kullanımını nesne başına yığın temelinde belirtebilirsiniz. Farklı yığınlar büyük nesne yığını (LOH), küçük nesne yığını (SOH) ve sabitlenmiş nesne yığınıdır (POH).

  • , DOTNET_GCHeapHardLimitLOHPercentveya ayarlarından herhangi biri DOTNET_GCHeapHardLimitSOHPercentiçin bir değer belirtirseniz ve DOTNET_GCHeapHardLimitLOHPercentiçin DOTNET_GCHeapHardLimitSOHPercent de bir değer belirtmeniz DOTNET_GCHeapHardLimitPOHPercent gerekir. Aksi takdirde çalışma zamanı başlatılamaz.
  • , DOTNET_GCHeapHardLimitLOHve DOTNET_GCHeapHardLimitPOH belirtilirse DOTNET_GCHeapHardLimitSOHbu ayarlar yoksayılır.
  • 1 değeri, GC'nin bu nesne yığını için toplam fiziksel belleğin %1'ini kullandığı anlamına gelir.
  • Her değer sıfırdan büyük ve 100'den küçük olmalıdır. Ayrıca, üç yüzde değerinin toplamı 100'den az olmalıdır. Aksi takdirde çalışma zamanı başlatılamaz.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitSOHPercent ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitSOHPercent onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitSOHPercent onaltılık değer .NET 6
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitLOHPercent ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitLOHPercent onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitLOHPercent onaltılık değer .NET 6
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HeapHardLimitPOHPercent ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHeapHardLimitPOHPercent onaltılık değer .NET 5
Ortam değişkeni DOTNET_GCHeapHardLimitPOHPercent onaltılık değer .NET 6

Bu yapılandırma ayarlarının belirli MSBuild özellikleri yoktur. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, yığın kullanımını %30 ile sınırlamak için değerler JSON dosyası için 30, ortam değişkeni için 0x1E veya 1E olur.

Yüksek bellek yüzdesi

Bellek yükü, kullanılan fiziksel belleğin yüzdesiyle gösterilir. Varsayılan olarak, fiziksel bellek yükü %90'a ulaştığında, disk belleğini önlemek için çöp toplama işlemleri tam ve sıkıştırma konusunda daha agresif hale gelir. Bellek yükü %90'ın altında olduğunda GC, daha kısa duraklamalara sahip olan ancak toplam yığın boyutunu çok azaltmayan tam çöp koleksiyonları için arka plan koleksiyonlarını tercih eder. Önemli miktarda belleğe (80 GB veya daha fazla) sahip makinelerde varsayılan yük eşiği %90 ile %97 arasındadır.

Yüksek bellek yükü eşiği, ortam değişkeni veya System.GC.HighMemoryPercent JSON yapılandırma ayarı tarafından DOTNET_GCHighMemPercent ayarlanabilir. Yığın boyutunu denetlemek istiyorsanız eşiği ayarlamayı göz önünde bulundurun. Örneğin, 64 GB belleğe sahip bir makinedeki baskın işlem için GC'nin kullanılabilir belleğin %10'unu içerdiğinde tepki vermeye başlaması mantıklıdır. Ancak, yalnızca 1 GB bellek tüketen bir işlem gibi daha küçük işlemler için GC, kullanılabilir belleğin %10'undan daha azı ile rahatça çalıştırılabilir. Bu küçük işlemler için eşiği daha yüksek ayarlamayı göz önünde bulundurun. Öte yandan, daha büyük işlemlerin daha küçük yığın boyutlarına sahip olmasını istiyorsanız (yeterli sayıda fiziksel bellek olduğunda bile), bu eşiğin düşürülerek GC'nin yığının sıkıştırılması için daha erken tepki vermesi etkili bir yoldur.

Dekont

Bir kapsayıcıda çalışan işlemler için GC, kapsayıcı sınırına göre fiziksel belleği dikkate alır.

Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.HighMemoryPercent ondalık değer .NET 5
Ortam değişkeni COMPlus_GCHighMemPercent onaltılık değer .NET Core 3.0
.NET Framework 4.7.2
Ortam değişkeni DOTNET_GCHighMemPercent onaltılık değer .NET 6

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, yüksek bellek eşiğini %75 olarak ayarlamak için değerler JSON dosyası için 75, ortam değişkeni için 0x4B veya 4B olabilir.

VM'leri koruma

  • Silinmesi gereken kesimlerin gelecekte kullanmak üzere bekleme listesine mi yerleştirileceği yoksa işletim sistemine mi (OS) geri gönderileceği yapılandırılır.
  • Varsayılan: Kesimleri işletim sistemine geri bırakın. Bu, değerini falseolarak ayarlamakla eşdeğerdir.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.RetainVM false - işletim sistemine yayın
true - beklemeye
.NET Core 1.0
MSBuild özelliği RetainVMGarbageCollection false - işletim sistemine yayın
true - beklemeye
.NET Core 1.0
Ortam değişkeni COMPlus_GCRetainVM 0 - işletim sistemine yayın
1 - beklemeye
.NET Core 1.0
Ortam değişkeni DOTNET_GCRetainVM 0 - işletim sistemine yayın
1 - beklemeye
.NET 6

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Proje dosyası:

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

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

</Project>

Büyük sayfalar

  • Yığın sabit sınırı ayarlandığında büyük sayfaların kullanılıp kullanılmayacağını belirtir.
  • Varsayılan: Yığın sabit sınırı ayarlandığında büyük sayfaları kullanmayın. Bu, değerini 0olarak ayarlamakla eşdeğerdir.
  • Bu deneysel bir ayardır.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json Geçersiz Yok Geçersiz
Ortam değişkeni COMPlus_GCLargePages 0 -Devre dışı
1 -Etkin
.NET Core 3.0
Ortam değişkeni DOTNET_GCLargePages 0 -Devre dışı
1 -Etkin
.NET 6

Büyük nesnelere izin ver

  • Toplam boyutu 2 gigabayttan (GB) büyük diziler için 64 bit platformlarda çöp toplayıcı desteğini yapılandırır.
  • Varsayılan: GC, 2 GB'tan büyük dizileri destekler. Bu, değerini 1olarak ayarlamakla eşdeğerdir.
  • Bu seçenek,.NET'in gelecek bir sürümünde kullanımdan kalkabilir.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json Geçersiz Yok Geçersiz
Ortam değişkeni COMPlus_gcAllowVeryLargeObjects 1 -Etkin
0 -Devre dışı
.NET Core 1.0
Ortam değişkeni DOTNET_gcAllowVeryLargeObjects 1 -Etkin
0 -Devre dışı
.NET 6
.NET Framework için app.config gcAllowVeryLargeObjects 1 -Etkin
0 -Devre dışı
.NET Framework 4.5

Büyük nesne yığını eşiği

  • Nesnelerin büyük nesne yığınına (LOH) gitmesine neden olan eşik boyutunu bayt cinsinden belirtir.
  • Varsayılan eşik 85.000 bayttır.
  • Belirttiğiniz değer varsayılan eşikten büyük olmalıdır.
  • Değer, çalışma zamanı tarafından geçerli yapılandırma için mümkün olan en büyük boyuta eşlenebilir. Api aracılığıyla GC.GetConfigurationVariables() çalışma zamanında kullanımdaki değeri inceleyebilirsiniz.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.LOHThreshold ondalık değer .NET Core 1.0
Ortam değişkeni COMPlus_GCLOHThreshold onaltılık değer .NET Core 1.0
Ortam değişkeni DOTNET_GCLOHThreshold onaltılık değer .NET 6
.NET Framework için app.config GCLOHThreshold ondalık değer .NET Framework 4.8

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnekler

runtimeconfig.json dosyası:

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

runtimeconfig.template.json dosyası:

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

Bahşiş

runtimeconfig.json dosyasında seçeneğini ayarlıysanız ondalık bir değer belirtin. Seçeneği bir ortam değişkeni olarak ayarlıysanız onaltılık bir değer belirtin. Örneğin, 120.000 baytlık bir eşik boyutu ayarlamak için değerler JSON dosyası için 120000 ve ortam değişkeni için 0x1D4C0 veya 1D4C0 olabilir.

Tek başına GC

  • Çalışma zamanının varsayılan GC uygulaması yerine yükleyen GC yerel kitaplığının adını belirtir. Bu yerel kitaplığın .NET çalışma zamanıyla aynı dizinde bulunması gerekir (Windows'da coreclr.dll , Linux'ta libcoreclr.so ).
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json Geçersiz Yok Geçersiz
Ortam değişkeni COMPlus_GCName string_path .NET Core 2.0
Ortam değişkeni DOTNET_GCName string_path .NET 6

Bellek tasarrufu

  • Daha sık çöp toplama ve muhtemelen daha uzun duraklatma süreleri pahasına bellek tasarrufu yapmak için çöp toplayıcıyı yapılandırır.
  • Varsayılan değer 0'dır, bu hiçbir değişiklik anlamına gelir.
  • Varsayılan değer 0'ın yanı sıra, 1 ile 9 (dahil) arasındaki değerler de geçerlidir. Değer ne kadar yüksek olursa, atık toplayıcı bellek tasarrufu yapmaya ve böylece yığını küçük tutmaya çalışır.
  • Değer sıfır değilse, çok fazla parçalanma varsa büyük nesne yığını otomatik olarak sıkıştırılır.
Ayar adı Değerler Sürüm kullanıma sunulmuştur
runtimeconfig.json System.GC.ConserveMemory 0 - 9 .NET 6
Ortam değişkeni COMPlus_GCConserveMemory 0 -9 .NET Framework 4.8
Ortam değişkeni DOTNET_GCConserveMemory 0 -9 .NET 6
.NET Framework için app.config GCConserveMemory 0 -9 .NET Framework 4.8

Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption MSBuild öğesi ekleyebilirsiniz. Özniteliğin değeri Include olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.

Örnek app.config dosyası:


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

Bahşiş

Hangi değerin sizin için en uygun olduğunu görmek için farklı sayılarla denemeler yapın. 5 ile 7 arasında bir değerle başlayın.