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.
Not
- 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 süresi 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österimini 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 önCOMPlus_
ek çalışmaya devam eder. .NET çalışma zamanının önceki bir sürümünü kullanıyorsanız, yine de ön ekiniCOMPlus_
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 dosyası/ 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çinGCHeapCount
, 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
false
olarak ayarlamakla eşdeğerdir.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
runtimeconfig.json | System.GC.Server |
false -workstationtrue -sunucu |
.NET Core 1.0 |
MSBuild özelliği | ServerGarbageCollection |
false -workstationtrue -sunucu |
.NET Core 1.0 |
Ortam değişkeni | COMPlus_gcServer |
0 -workstation1 -sunucu |
.NET Core 1.0 |
Ortam değişkeni | DOTNET_gcServer |
0 -workstation1 -sunucu |
.NET 6 |
.NET Framework için app.config | GCServer | false -workstationtrue -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
true
olarak 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 GCfalse - eşzamanlı olmayan GC |
.NET Core 1.0 |
MSBuild özelliği | ConcurrentGarbageCollection |
true - arka plan GCfalse - eşzamanlı olmayan GC |
.NET Core 1.0 |
Ortam değişkeni | COMPlus_gcConcurrent |
1 - arka plan GC0 - eşzamanlı olmayan GC |
.NET Core 1.0 |
Ortam değişkeni | DOTNET_gcConcurrent |
1 - arka plan GC0 - eşzamanlı olmayan GC |
.NET 6 |
.NET Framework için app.config | gcConcurrent | true - arka plan GCfalse - 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:
- Affinitize
- Maskeyi affinitize edin
- Aralıkları affinitize edin
- CPU grupları
- Yığın sayısı
- Yığın sabit sınırı
- Yığın sabit sınırı yüzdesi
- Nesne başına yığın sabit sınırları
- Nesne başına yığın sabit sınır yüzdeleri
- Yüksek bellek yüzdesi
- VM'leri koruma
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ı
- Çöp toplayıcı tarafından oluşturulan yığın sayısını sınırlar.
- Yalnızca sunucu çöp toplama için geçerlidir.
- GC işlemci benzitesi etkinse (varsayılan değer budur), yığın sayısı ayarı
n
GC yığınlarını/iş parçacıklarını ilkn
işlemcilere yakınlaştırır. (Tam olarak hangi işlemcilerin onayleneceğini belirtmek için affinitize maskesi veya affinitize aralıkları ayarlarını kullanın.) - GC işlemci benzitesi devre dışı bırakılırsa, bu ayar GC yığınlarının sayısını sınırlar.
- Daha fazla bilgi için bkz . GCHeapCount açıklamaları.
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ğinin 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
}
}
İpucu
runtimeconfig.json 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ğinin 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
- Çöp toplayıcı iş parçacıkları için kullanılacak işlemcilerin listesini belirtir.
- Bu ayar System.GC.HeapAffinitizeMask'a benzer, ancak 64'ten fazla işlemci belirtmenize izin verir.
- Windows işletim sistemleri için işlemci numarasını veya aralığını ilgili CPU grubuyla önek olarak ekleyin; örneğin, "0:1-10,0:12,1:50-52,1:7". Aslında 1'den fazla CPU grubunuz yoksa bu ayarı kullanamazsınız. Affinitize maske ayarını kullanmanız gerekir. Ve belirttiğiniz sayılar bu grubun içindedir, yani = 64 olamaz >.
- CPU grubu kavramının mevcut olmadığı Linux işletim sistemlerinde, aynı aralıkları belirtmek için hem bu ayarı hem de Affinitize maskesi ayarını kullanabilirsiniz. "0:1-10" yerine "1-10" belirtin çünkü grup dizini belirtmeniz gerekmez.
- GC işlemci benzitesi devre dışı bırakılırsa, bu ayar yoksayılır.
- Yalnızca sunucu çöp toplama için geçerlidir.
- 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.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ğinin 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.
Not
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
0
olarak 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 -sakattrue -Etkin |
.NET 5 |
Ortam değişkeni | COMPlus_GCCpuGroup |
0 -sakat1 -Etkin |
.NET Core 1.0 |
Ortam değişkeni | DOTNET_GCCpuGroup |
0 -sakat1 -Etkin |
.NET 6 |
.NET Framework için app.config | GCCpuGroup | false -sakattrue -Etkin |
Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption
MSBuild öğesi ekleyebilirsiniz. özniteliğinin değeri Include
olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.
Not
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_UseAllCpuGroups
1
değ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
false
olarak ayarlamakla eşdeğerdir.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
runtimeconfig.json | System.GC.NoAffinitize |
false - affinitizetrue - affinitize etmeyin |
.NET Core 3.0 |
Ortam değişkeni | COMPlus_GCNoAffinitize |
0 - affinitize1 - affinitize etmeyin |
.NET Core 3.0 |
Ortam değişkeni | DOTNET_GCNoAffinitize |
0 - affinitize1 - affinitize etmeyin |
.NET 6 |
.NET Framework için app.config | GCNoAffinitize | false - affinitizetrue - 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ğinin 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 sabit sınırı
- Yığın sabit sınırı, GC yığını ve GC muhasebesi için bayt cinsinden maksimum işleme boyutu olarak tanımlanır.
- Bu ayar yalnızca 64 bit bilgisayarlar için geçerlidir.
- Bu sınır yapılandırılmamışsa ancak işlem bellek kısıtlanmış bir ortamda çalışıyorsa, yani belirtilen bellek sınırına sahip bir kapsayıcının içinde varsayılan değer ayarlanır. Bu varsayılan değer, kapsayıcıdaki bellek sınırının 20 MB veya %75'i kadardır.
- Nesne başına yığın sabit sınırları yapılandırılırsa bu ayar yoksayılır.
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ğinin 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
}
}
İpucu
runtimeconfig.json 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 sabit sınırı yüzdesi
- Toplam fiziksel belleğin yüzdesi olarak yığın sabit sınırını belirtir. İşlem bellek kısıtlanmış bir ortamda çalışıyorsa, yani belirtilen bellek sınırına sahip bir kapsayıcının içinde toplam fiziksel bellek bellek sınırıdır; aksi takdirde makinede kullanılabilir.
- Bu ayar yalnızca 64 bit bilgisayarlar için geçerlidir.
- Nesne başına yığın sabit sınırları yapılandırılırsa veya yığın sabit sınırı yapılandırılırsa bu ayar yoksayılır.
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ğinin 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
}
}
İpucu
runtimeconfig.json 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 sabit sınırları
GC'nin yığın sabit sınırı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_GCHeapHardLimitLOH
veya ayarlarından herhangi biriDOTNET_GCHeapHardLimitSOH
için bir değer belirtirseniz veDOTNET_GCHeapHardLimitLOH
içinDOTNET_GCHeapHardLimitSOH
de bir değer belirtmenizDOTNET_GCHeapHardLimitPOH
gerekir. Aksi takdirde çalışma zamanı başlatılamaz. - için
DOTNET_GCHeapHardLimitPOH
varsayılan değer 0'dır.DOTNET_GCHeapHardLimitSOH
veDOTNET_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ğinin değeri Include
olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.
İpucu
runtimeconfig.json 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 sabit sınır yüzdeleri
GC'nin yığın sabit sınırı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_GCHeapHardLimitLOHPercent
veya ayarlarından herhangi biriDOTNET_GCHeapHardLimitSOHPercent
için bir değer belirtirseniz veDOTNET_GCHeapHardLimitLOHPercent
içinDOTNET_GCHeapHardLimitSOHPercent
de bir değer belirtmenizDOTNET_GCHeapHardLimitPOHPercent
gerekir. Aksi takdirde çalışma zamanı başlatılamaz. - ,
DOTNET_GCHeapHardLimitLOH
veDOTNET_GCHeapHardLimitPOH
belirtilirseDOTNET_GCHeapHardLimitSOH
bu 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ğinin değeri Include
olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.
İpucu
runtimeconfig.json 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.
Not
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ğinin değeri Include
olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.
İpucu
runtimeconfig.json 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
false
olarak 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ıntrue - beklemeye |
.NET Core 1.0 |
MSBuild özelliği | RetainVMGarbageCollection |
false - işletim sistemine yayıntrue - beklemeye |
.NET Core 1.0 |
Ortam değişkeni | COMPlus_GCRetainVM |
0 - işletim sistemine yayın1 - beklemeye |
.NET Core 1.0 |
Ortam değişkeni | DOTNET_GCRetainVM |
0 - işletim sistemine yayın1 - 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
0
olarak ayarlamakla eşdeğerdir. - Bu deneysel bir ayardır.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
runtimeconfig.json | Yok | Yok | Yok |
Ortam değişkeni | COMPlus_GCLargePages |
0 -sakat1 -Etkin |
.NET Core 3.0 |
Ortam değişkeni | DOTNET_GCLargePages |
0 -sakat1 -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
1
olarak 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 | Yok | Yok | Yok |
Ortam değişkeni | COMPlus_gcAllowVeryLargeObjects |
1 -Etkin0 -sakat |
.NET Core 1.0 |
Ortam değişkeni | DOTNET_gcAllowVeryLargeObjects |
1 -Etkin0 -sakat |
.NET 6 |
.NET Framework için app.config | gcAllowVeryLargeObjects | 1 -Etkin0 -sakat |
.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ğinin 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
}
}
İpucu
runtimeconfig.json 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
Varsayılan GC uygulaması yerine tek başına çöp toplayıcı kullanmak için yolu (.NET 9 ve sonraki sürümlerde) veya GC yerel kitaplığının adını belirtebilirsiniz.
Yol
- Çalışma zamanının varsayılan GC uygulaması yerine yüklenebilen gc yerel kitaplığının tam yolunu belirtir. Bu konumun güvenli olması için kötü amaçlı olabilecek kurcalamalara karşı korunması gerekir.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
runtimeconfig.json | System.GC.Path |
string_path | .NET 9 |
Ortam değişkeni | DOTNET_GCPath |
string_path | .NET 9 |
Veri Akışı Adı
Çalışma zamanının varsayılan GC uygulaması yerine yükleyen GC yerel kitaplığının adını belirtir. .NET 9'da davranış, Yol yapılandırmasının kullanıma sunulmasıyla değişti.
.NET 8 ve önceki sürümlerde:
- Kitaplığın yalnızca bir adı belirtilirse, kitaplığın .NET çalışma zamanıyla aynı dizinde bulunması gerekir (Windows'da coreclr.dll , Linux'ta libcoreclr.so veya OSX'te libcoreclr.dylib ).
- Değer göreli bir yol da olabilir; örneğin, ".. Windows'da \clrgc.dll" clrgc.dll .NET çalışma zamanı dizininin üst dizininden yüklenir.
.NET 9 ve sonraki sürümlerde bu değer yalnızca bir dosya adı belirtir (yollara izin verilmez):
- .NET, uygulamanızın
Main
yöntemini içeren derlemenin bulunduğu dizinde belirttiğiniz adı arar. - Dosya bulunamazsa .NET çalışma zamanı dizininde arama yapılır.
Yol yapılandırması belirtilirse bu yapılandırma ayarı yoksayılır.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
runtimeconfig.json | System.GC.Name |
string_name | .NET 7 |
Ortam değişkeni | COMPlus_GCName |
string_name | .NET Core 2.0 |
Ortam değişkeni | DOTNET_GCName |
string_name | .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ğinin 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>
İpucu
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.
Uygulama boyutlarına dinamik uyarlama (DATAS)
- Çöp toplayıcıyı DATAS kullanacak şekilde yapılandırılır. DATAS, uygulama belleği gereksinimlerine uyarlanmıştır; bu da uygulama yığını boyutunun uzun ömürlü veri boyutuyla kabaca orantılı olması gerektiği anlamına gelir.
- .NET 9'dan başlayarak varsayılan olarak etkindir.
Ayar adı | Değerler | Sürüm kullanıma sunulmuştur | |
---|---|---|---|
Ortam değişkeni | DOTNET_GCDynamicAdaptationMode |
1 -Etkin0 -sakat |
.NET 8 |
MSBuild özelliği | GarbageCollectionAdaptationMode |
1 -Etkin0 -sakat |
.NET 8 |
runtimeconfig.json | System.GC.DynamicAdaptationMode |
1 -Etkin0 -sakat |
.NET 8 |
Bu yapılandırma ayarı belirli bir MSBuild özelliğine sahip değil. Ancak, bunun yerine bir RuntimeHostConfigurationOption
MSBuild öğesi ekleyebilirsiniz. özniteliğinin değeri Include
olarak runtimeconfig.json ayar adını kullanın. Bir örnek için bkz . MSBuild özellikleri.