Options de configuration du runtime pour le garbage collection
Cette page contient des informations sur les paramètres du garbage collector (GC) du runtime .NET. Si vous essayez d’atteindre les performances maximales d’une application en cours d’exécution, envisagez d’utiliser ces paramètres. Toutefois, les valeurs par défaut fournissent des performances optimales pour la plupart des applications dans des situations standard.
Les paramètres sont organisés en groupes dans cette page. Les paramètres au sein de chaque groupe sont couramment utilisés conjointement les uns avec les autres pour fournir un résultat spécifique.
Notes
- Ces configurations ne sont lues par le runtime que lorsque le GC est initialisé (cela signifie généralement pendant le démarrage du processus). Si vous modifiez une variable d’environnement lorsqu’un processus est déjà en cours d’exécution, la modification ne sera pas répercutée dans ce processus. Les paramètres qui peuvent être modifiés via les API au moment de l’exécution, tels que le niveau de latence, sont omis dans cette page.
- Étant donné que le GC est par processus, il est rarement judicieux de définir ces configurations au niveau de l’ordinateur. Par exemple, vous ne souhaitez pas que tous les processus .NET sur un ordinateur utilisent le serveur GC ou la même limite matérielle de tas.
- Pour les valeurs numériques, utilisez la notation décimale pour les paramètres dans le fichier runtimeconfig.json ou runtimeconfig.template.json et la notation hexadécimale pour les paramètres des variables d’environnement. Pour les valeurs hexadécimales, vous pouvez les spécifier avec ou sans le préfixe « 0x ».
- Si vous utilisez les variables d’environnement, .NET 6 et les versions ultérieures standardisent sur le préfixe
DOTNET_
au lieu deCOMPlus_
. Toutefois, le préfixeCOMPlus_
continuera à fonctionner. Si vous utilisez une version précédente du runtime .NET, vous devez tout de même utiliser le préfixeCOMPlus_
, par exempleCOMPlus_gcServer
.
Méthodes de spécification de la configuration
Pour différentes versions du runtime .NET, il existe différentes façons de spécifier les valeurs de configuration. Le tableau suivant présente un résumé.
Emplacement de configuration | Les versions de .NET à cet emplacement s’appliquent à | Formats | Interprétation |
---|---|---|---|
Fichier runtimeconfig.json ou fichier runtimeconfig.template.json |
.NET (Core) | n | n est interprété comme une valeur décimale. |
Variable d'environnement | .NET Framework, .NET (Core) | 0xn ou n | n est interprété comme une valeur hexadécimal dans les deux formats |
Fichier app.config | .NET Framework | 0xn | n est interprété comme une valeur hexadécimal1 |
1 Vous pouvez spécifier une valeur sans préfixe pour un 0x
paramètre de fichier app.config, mais ce n’est pas recommandé. Sur .NET Framework 4.8+, en raison d’un bogue, une valeur spécifiée sans le préfixe 0x
est interprétée comme hexadécimale, mais sur les versions précédentes de .NET Framework, elle est interprétée comme décimale. Pour éviter d’avoir à modifier votre configuration, utilisez le préfixe 0x
lors de la spécification d’une valeur dans votre fichier app.config.
Par exemple, pour spécifier 12 tas pour GCHeapCount
pour une application .NET Framework nommée A.exe, ajoutez le code XML suivant au fichier A.exe.config.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<runtime>
<gcServer enabled="true"/>
<GCHeapCount>0xc</GCHeapCount>
</runtime>
</configuration>
Pour .NET (Core) et .NET Framework, vous pouvez utiliser des variables d’environnement.
Sur Windows à l’aide de .NET 6 ou version ultérieure :
SET DOTNET_gcServer=1
SET DOTNET_GCHeapCount=c
Sur Windows à l’aide de .NET 5 ou version antérieure :
SET COMPlus_gcServer=1
SET COMPlus_GCHeapCount=c
Sur d’autres systèmes d’exploitation :
Pour .NET 6 ou versions ultérieures :
export DOTNET_gcServer=1
export DOTNET_GCHeapCount=c
Pour .NET 5 et versions antérieures :
export COMPlus_gcServer=1
export COMPlus_GCHeapCount=c
Si vous n’utilisez pas .NET Framework, vous pouvez également définir la valeur dans le fichier runtimeconfig.json ou runtimeconfig.template.json.
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.Server": true,
"System.GC.HeapCount": 12
}
}
Saveurs du garbage collection
Les deux principales saveurs de garbage collection sont GC de station de travail et GC de serveur. Pour plus d’informations sur les différences entre les deux, consultez Garbage collection de station de travail et serveur.
Les sous-saveurs de garbage collection sont en arrière-plan et non simultanées.
Utilisez les paramètres suivants pour sélectionner des saveurs de garbage collection :
Station de travail ou serveur
- Configure si l’application utilise le garbage collection de station de travail ou le garbage collection de serveur.
- Par défaut : garbage collection de station de travail. Ceci équivaut à définir la valeur sur
false
.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.Server |
false – station de travailtrue – serveur |
.NET Core 1.0 |
Propriété MSBuild | ServerGarbageCollection |
false – station de travailtrue – serveur |
.NET Core 1.0 |
Variable d'environnement | COMPlus_gcServer |
0 – station de travail1 – serveur |
.NET Core 1.0 |
Variable d'environnement | DOTNET_gcServer |
0 – station de travail1 – serveur |
.NET 6 |
app.config pour .NET Framework | GCServer | false – station de travailtrue – serveur |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.Server": true
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.Server": true
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ServerGarbageCollection>true</ServerGarbageCollection>
</PropertyGroup>
</Project>
GC d’arrière-plan
- Configure si le garbage collection en arrière-plan (simultané) est activé.
- Par défaut : utiliser le GC en arrière-plan. Ceci équivaut à définir la valeur sur
true
. - Pour plus d’informations, consultez Garbage collection en arrière-plan.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.Concurrent |
true – GC en arrière-planfalse – GC non simultané |
.NET Core 1.0 |
Propriété MSBuild | ConcurrentGarbageCollection |
true – GC en arrière-planfalse – GC non simultané |
.NET Core 1.0 |
Variable d'environnement | COMPlus_gcConcurrent |
1 – GC en arrière-plan0 – GC non simultané |
.NET Core 1.0 |
Variable d'environnement | DOTNET_gcConcurrent |
1 – GC en arrière-plan0 – GC non simultané |
.NET 6 |
app.config pour .NET Framework | gcConcurrent | true – GC en arrière-planfalse – GC non simultané |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.Concurrent": false
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.Concurrent": false
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<ConcurrentGarbageCollection>false</ConcurrentGarbageCollection>
</PropertyGroup>
</Project>
Gérer l’utilisation des ressources
Utilisez les paramètres suivants pour gérer l’utilisation de la mémoire et du processeur du garbage collector :
- Créer des affinités
- Masque d’affinités
- Plages d’affinités
- Groupes de processeurs
- Nombre de tas
- Limite matérielle du tas
- Pourcentage de limite de tas dur
- Limites matérielles par objet-tas
- Pourcentages de limite matérielle par objet-tas
- Pourcentage de mémoire élevé
- Conserver la machine virtuelle
Pour plus d’informations sur certains de ces paramètres, consultez l’entrée de blog Middle ground between workstation and server GC.
Nombre de tas
- Limite le nombre de tas créés par le garbage collector.
- S’applique uniquement au garbage collection de serveurs.
- Si l’affinité du processeur GC est activée, ce qui est le cas par défaut, le paramètre de nombre de tas crée des affinités entre les
n
threads/tas de GC et lesn
premiers processeurs. (Utilisez les paramètres masque d’affinité ou plages d’affinités afin de spécifier exactement les processeurs pour lesquels créer des affinités.) - Si l’affinité du processeur GC est désactivée, ce paramètre limite le nombre de tas de GC.
- Pour plus d’informations, consultez les remarques sur GCHeapCount.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapCount |
valeur décimale | .NET Core 3.0 |
Variable d'environnement | COMPlus_GCHeapCount |
valeur hexadécimale | .NET Core 3.0 |
Variable d'environnement | DOTNET_GCHeapCount |
valeur hexadécimale | .NET 6 |
app.config pour .NET Framework | GCHeapCount | valeur décimale | .NET Framework 4.6.2 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapCount": 16
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.HeapCount": 16
}
}
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour limiter le nombre de tas à 16, les valeurs doivent être 16 pour le fichier JSON et 0x10 ou 10 pour la variable d’environnement.
Masque d’affinités
- Spécifie les processeurs exacts que les threads du garbage collector doivent utiliser.
- Si l’affinité du processeur GC est désactivée, ce paramètre est ignoré.
- S’applique uniquement au garbage collection de serveurs.
- La valeur est un masque de bits qui définit les processeurs disponibles pour le processus. Par exemple, une valeur décimale de 1023 (ou une valeur hexadécimale de 0x3FF ou 3FF si vous utilisez la variable d’environnement) correspond à 0011 1111 1111 en notation binaire. Cela spécifie que les 10 premiers processeurs doivent être utilisés. Pour spécifier les 10 processeurs suivants, c’est-à-dire les processeurs 10-19, spécifiez une valeur décimale de 1047552 (ou une valeur hexadécimale de 0xFFC00 ou FFC00), ce qui équivaut à la valeur binaire 1111 1111 1100 0000 0000.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeMask |
valeur décimale | .NET Core 3.0 |
Variable d'environnement | COMPlus_GCHeapAffinitizeMask |
valeur hexadécimale | .NET Core 3.0 |
Variable d'environnement | DOTNET_GCHeapAffinitizeMask |
valeur hexadécimale | .NET 6 |
app.config pour .NET Framework | GCHeapAffinitizeMask | valeur décimale | .NET Framework 4.6.2 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.HeapAffinitizeMask": 1023
}
}
Plages d’affinités
- Spécifie la liste des processeurs à utiliser pour les threads du récupérateur de mémoire.
- Ce paramètre est semblable à System.GC.HeapAffinitizeMask, si ce n’est qu’il vous permet de spécifier plus de 64 processeurs.
- Pour les systèmes d’exploitation Windows, préfixez la plage ou le numéro de processeur avec le groupe de processeurs correspondant, par exemple « 0:1-10,0:12,1:50-52,1:7 ». Si vous n’avez pas plus d’un groupe de CPU, vous ne pouvez pas utiliser ce paramètre. Vous devez utiliser le paramètre Affinitize mask. De plus, les nombres que vous spécifiez se trouvent dans ce groupe, ce qui signifie qu’il ne peut pas être >= 64.
- Pour les systèmes d’exploitation Linux, où le concept de groupe de CPU n’existe pas, vous pouvez utiliser ce paramètre et le paramètre Affinitize mask pour spécifier les mêmes plages. Au lieu de « 0 :1-10 », spécifiez « 1-10 », car vous n’avez pas besoin de spécifier un index de groupe.
- Si l’affinité du processeur GC est désactivée, ce paramètre est ignoré.
- S’applique uniquement au garbage collection de serveurs.
- Pour plus d’informations, consultez Making CPU configuration better for GC on machines with > 64 CPUs dans le blog de Maoni Stephens.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapAffinitizeRanges |
Liste séparée par des virgules des numéros de processeur ou des plages de numéros de processeur. Exemple Unix : « 1-10,12,50-52,70 » Exemple Windows : « 0:1-10,0:12,1:50-52,1:7 » |
.NET Core 3.0 |
Variable d'environnement | COMPlus_GCHeapAffinitizeRanges |
Liste séparée par des virgules des numéros de processeur ou des plages de numéros de processeur. Exemple Unix : « 1-10,12,50-52,70 » Exemple Windows : « 0:1-10,0:12,1:50-52,1:7 » |
.NET Core 3.0 |
Variable d'environnement | DOTNET_GCHeapAffinitizeRanges |
Liste séparée par des virgules des numéros de processeur ou des plages de numéros de processeur. Exemple Unix : « 1-10,12,50-52,70 » Exemple Windows : « 0:1-10,0:12,1:50-52,1:7 » |
.NET 6 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.HeapAffinitizeRanges": "0:1-10,0:12,1:50-52,1:7"
}
}
Groupes de processeurs
Configure si le garbage collector utilise ou non des groupes de processeurs.
Quand un ordinateur Windows 64 bits a plusieurs groupes de processeurs, c’est-à-dire qu’il y a plus de 64 processeurs, l’activation de cet élément étend le garbage collection à tous les groupes de processeurs. Le garbage collector utilise tous les cœurs pour créer et équilibrer les tas.
Remarque
Ce concept est réservé à Windows. Dans les versions antérieures de Windows, Windows a limité un processus à un groupe de CPU. Par conséquent, GC n’a utilisé qu’un seul groupe de CPU, sauf si vous avez utilisé ce paramètre pour activer plusieurs groupes de CPU. Cette limitation du système d’exploitation a été levée dans Windows 11 et Server 2022. En outre, à compter de .NET 7, GC utilise par défaut tous les groupes de CPU lors de l’exécution sur Windows 11 ou Server 2022.
S’applique au garbage collection de serveur sur les systèmes d’exploitation Windows 64 bits uniquement.
Par défaut : GC ne s’étend pas aux groupes de processeurs. Cela équivaut à définir la valeur sur
0
.Pour plus d’informations, consultez Making CPU configuration better for GC on machines with > 64 CPUs dans le blog de Maoni Stephens.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.CpuGroup |
false - désactivétrue – activé |
.NET 5 |
Variable d'environnement | COMPlus_GCCpuGroup |
0 - désactivé1 – activé |
.NET Core 1.0 |
Variable d'environnement | DOTNET_GCCpuGroup |
0 - désactivé1 – activé |
.NET 6 |
app.config pour .NET Framework | GCCpuGroup | false - désactivétrue – activé |
Ce paramètre de configuration n’a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Remarque
Pour configurer le Common Language Runtime (CLR) afin de distribuer également les threads du pool de threads sur tous les groupes de processeurs, activez l’option d’élément Thread_UseAllCpuGroups. Pour les applications .NET Core, vous pouvez activer cette option en définissant la valeur de la variable d’environnement DOTNET_Thread_UseAllCpuGroups
sur 1
.
Créer des affinités
- Spécifie s’il faut créer des affinités entre les threads de garbage collection et les processeurs. La création d’affinités d’un thread de GC signifie qu’il ne peut s’exécuter que sur son processeur spécifique. Un tas est créé pour chaque thread de GC.
- S’applique uniquement au garbage collection de serveurs.
- Par défaut : créer des affinités entre les threads de garbage collection et les processeurs. Ceci équivaut à définir la valeur sur
false
.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.NoAffinitize |
false – créer des affinitéstrue – ne pas créer d’affinités |
.NET Core 3.0 |
Variable d'environnement | COMPlus_GCNoAffinitize |
0 – créer des affinités1 – ne pas créer d’affinités |
.NET Core 3.0 |
Variable d'environnement | DOTNET_GCNoAffinitize |
0 – créer des affinités1 – ne pas créer d’affinités |
.NET 6 |
app.config pour .NET Framework | GCNoAffinitize | false – créer des affinitéstrue – ne pas créer d’affinités |
.NET Framework 4.6.2 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.NoAffinitize": true
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.NoAffinitize": true
}
}
Limite matérielle du tas
- La limite matérielle du tas est définie comme la taille maximale de validation, en octets, pour le tas GC et la comptabilité GC.
- Ce paramètre s’applique uniquement aux ordinateurs 64 bits.
- Si cette limite n’est pas configurée, mais que le processus s’exécute dans un environnement limité en mémoire, c’est-à-dire à l’intérieur d’un conteneur avec une limite de mémoire spécifiée, une valeur par défaut est définie. Cette valeur par défaut est supérieure à 20 Mo ou 75 % de la limite de mémoire sur le conteneur.
- Ce paramètre est ignoré si les limites matérielles par objet-tas sont configurées.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimit |
valeur décimale | .NET Core 3.0 |
Variable d'environnement | COMPlus_GCHeapHardLimit |
valeur hexadécimale | .NET Core 3.0 |
Variable d'environnement | DOTNET_GCHeapHardLimit |
valeur hexadécimale | .NET 6 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.HeapHardLimit": 209715200
}
}
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour spécifier une limite imposée de tas de 200 mébioctets (Mio), les valeurs sont 209715200 pour le fichier JSON et 0xC800000 ou C800000 pour la variable d’environnement.
Pourcentage de limite de tas dur
- Spécifie la limite matérielle du tas sous la forme d’un pourcentage de la mémoire physique totale. Si le processus s’exécute dans un environnement limité en mémoire, autrement dit, à l’intérieur d’un conteneur avec une limite de mémoire spécifiée, la mémoire physique totale est la limite de mémoire ; sinon, il s’agit de ce qui est disponible sur la machine.
- Ce paramètre s’applique uniquement aux ordinateurs 64 bits.
- Ce paramètre est ignoré si les limites matérielles par objet-tas sont configurées ou si la limite matérielle du tas est configurée.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPercent |
valeur décimale | .NET Core 3.0 |
Variable d'environnement | COMPlus_GCHeapHardLimitPercent |
valeur hexadécimale | .NET Core 3.0 |
Variable d'environnement | DOTNET_GCHeapHardLimitPercent |
valeur hexadécimale | .NET 6 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.HeapHardLimitPercent": 30
}
}
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour limiter l’utilisation de tas à 30 %, les valeurs doivent être 30 pour le fichier JSON et 0x1E ou 1E pour la variable d’environnement.
Limites matérielles par objet-tas
Vous pouvez spécifier la limite matérielle du tas du GC sur une base par objet-tas. Les différents tas correspondent au tas d’objets volumineux (LOH), au tas de petits objets (SOH) et au tas d’objets épinglés (POH).
- Si vous spécifiez une valeur pour l’un des paramètres
DOTNET_GCHeapHardLimitSOH
,DOTNET_GCHeapHardLimitLOH
ouDOTNET_GCHeapHardLimitPOH
, vous devez également spécifier une valeur pourDOTNET_GCHeapHardLimitSOH
etDOTNET_GCHeapHardLimitLOH
. Dans le cas contraire, l’initialisation du runtime échoue. - La valeur par défaut pour
DOTNET_GCHeapHardLimitPOH
est 0.DOTNET_GCHeapHardLimitSOH
etDOTNET_GCHeapHardLimitLOH
n’ont pas de valeurs par défaut.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOH |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitSOH |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitSOH |
valeur hexadécimale | .NET 6 |
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOH |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitLOH |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitLOH |
valeur hexadécimale | .NET 6 |
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOH |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitPOH |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitPOH |
valeur hexadécimale | .NET 6 |
Ces paramètres de configuration n'a pas de propriétés MSBuild spécifiques. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour spécifier une limite imposée de tas de 200 mébioctets (Mio), les valeurs sont 209715200 pour le fichier JSON et 0xC800000 ou C800000 pour la variable d’environnement.
Pourcentages de limite matérielle par objet-tas
Vous pouvez spécifier la limite matérielle du tas du GC sur une base par objet-tas. Les différents tas correspondent au tas d’objets volumineux (LOH), au tas de petits objets (SOH) et au tas d’objets épinglés (POH).
- Si vous spécifiez une valeur pour l’un des paramètres
DOTNET_GCHeapHardLimitSOHPercent
,DOTNET_GCHeapHardLimitLOHPercent
ouDOTNET_GCHeapHardLimitPOHPercent
, vous devez également spécifier une valeur pourDOTNET_GCHeapHardLimitSOHPercent
etDOTNET_GCHeapHardLimitLOHPercent
. Dans le cas contraire, l’initialisation du runtime échoue. - Ces paramètres sont ignorés si
DOTNET_GCHeapHardLimitSOH
,DOTNET_GCHeapHardLimitLOH
etDOTNET_GCHeapHardLimitPOH
sont spécifiés. - La valeur 1 signifie que le garbage collection utilise 1 % de la mémoire physique totale pour ce tas d’objets.
- Chaque valeur doit être supérieure à zéro et inférieure à 100. En outre, la somme des trois valeurs de pourcentage doit être inférieure à 100. Dans le cas contraire, l’initialisation du runtime échoue.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitSOHPercent |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitSOHPercent |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitSOHPercent |
valeur hexadécimale | .NET 6 |
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitLOHPercent |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitLOHPercent |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitLOHPercent |
valeur hexadécimale | .NET 6 |
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HeapHardLimitPOHPercent |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHeapHardLimitPOHPercent |
valeur hexadécimale | .NET 5 |
Variable d'environnement | DOTNET_GCHeapHardLimitPOHPercent |
valeur hexadécimale | .NET 6 |
Ces paramètres de configuration n'a pas de propriétés MSBuild spécifiques. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour limiter l’utilisation de tas à 30 %, les valeurs doivent être 30 pour le fichier JSON et 0x1E ou 1E pour la variable d’environnement.
Pourcentage de mémoire élevé
La charge de mémoire est indiquée par le pourcentage de mémoire physique utilisée. Par défaut, quand la charge de mémoire physique atteint 90 %, le garbage collection devient plus agressif pour effectuer un nettoyage de la mémoire complet et compact afin d’éviter la pagination. Lorsque la charge de mémoire est inférieure à 90 %, le GC favorise les collections en arrière-plan pour effectuer des garbage collections complets qui effectuent des pauses plus courtes mais ne réduisent pas de beaucoup la taille totale des tas. Sur les machines dotées d’une quantité importante de mémoire (80 Go ou plus), le seuil de charge par défaut est compris entre 90 % et 97 %.
Le seuil de charge de mémoire élevé peut être ajusté par la variable d’environnement DOTNET_GCHighMemPercent
ou par le paramètre de configuration JSON System.GC.HighMemoryPercent
. Envisagez d’ajuster le seuil si vous souhaitez contrôler la taille de tas. Par exemple, pour le processus dominant sur une machine dotée de 64 Go de mémoire, il est raisonnable que le garbage collection commence à réagir quand 10 % de mémoire est disponible. Toutefois, pour les processus plus petits, par exemple, un processus qui ne consomme que 1 Go de mémoire, le garbage collection peut s’exécuter confortablement avec moins de 10 % de mémoire disponible. Pour ces plus petits processus, envisagez de définir un seuil plus élevé. D’un autre côté, si vous souhaitez que les processus plus volumineux aient des tailles de tas plus petites (même lorsqu’il y a beaucoup de mémoire physique disponible), l’abaissement de ce seuil est un moyen efficace pour faire réagir plus tôt le garbage collection pour compacter le tas.
Notes
Pour les processus s’exécutant dans un conteneur, le GC considère la mémoire physique en fonction de la limite de conteneur.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.HighMemoryPercent |
valeur décimale | .NET 5 |
Variable d'environnement | COMPlus_GCHighMemPercent |
valeur hexadécimale | .NET Core 3.0 .NET Framework 4.7.2 |
Variable d'environnement | DOTNET_GCHighMemPercent |
valeur hexadécimale | .NET 6 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour définir le seuil de mémoire élevé sur 75 %, les valeurs sont 75 pour le fichier JSON et 0x4B ou 4B pour la variable d’environnement.
Conserver la machine virtuelle
- Configure si les segments qui doivent être supprimés sont placés sur une liste d’attente pour une utilisation ultérieure ou s’ils sont remis au système d’exploitation (SE).
- Par défaut : libérer les segments pour le système d’exploitation. Ceci équivaut à définir la valeur sur
false
.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.RetainVM |
false – libérer pour le système d’exploitationtrue – mettre en attente |
.NET Core 1.0 |
Propriété MSBuild | RetainVMGarbageCollection |
false – libérer pour le système d’exploitationtrue – mettre en attente |
.NET Core 1.0 |
Variable d'environnement | COMPlus_GCRetainVM |
0 – libérer pour le système d’exploitation1 – mettre en attente |
.NET Core 1.0 |
Variable d'environnement | DOTNET_GCRetainVM |
0 – libérer pour le système d’exploitation1 – mettre en attente |
.NET 6 |
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.RetainVM": true
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.RetainVM": true
}
}
Fichier projet :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<RetainVMGarbageCollection>true</RetainVMGarbageCollection>
</PropertyGroup>
</Project>
Pages volumineuses
- Spécifie si des pages volumineuses doivent être utilisées quand une limite imposée de tas est définie.
- Par défaut : ne pas utiliser de pages volumineuses quand une limite imposée de tas est définie. Cela équivaut à définir la valeur sur
0
. - Il s’agit d’un paramètre expérimental.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | N/A | N/A | N/A |
Variable d'environnement | COMPlus_GCLargePages |
0 - désactivé1 – activé |
.NET Core 3.0 |
Variable d'environnement | DOTNET_GCLargePages |
0 - désactivé1 – activé |
.NET 6 |
Autoriser les objets volumineux
- Configure la prise en charge du garbage collector sur les plateformes 64 bits pour les tableaux dont la taille totale dépasse 2 gigaoctets (Go).
- Par défaut : le GC prend en charge les tableaux de plus de 2 Go. Ceci équivaut à définir la valeur sur
1
. - Cette option peut devenir obsolète dans une prochaine version de .NET.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | N/A | N/A | N/A |
Variable d'environnement | COMPlus_gcAllowVeryLargeObjects |
1 – activé0 - désactivé |
.NET Core 1.0 |
Variable d'environnement | DOTNET_gcAllowVeryLargeObjects |
1 – activé0 - désactivé |
.NET 6 |
app.config pour .NET Framework | gcAllowVeryLargeObjects | 1 – activé0 - désactivé |
.NET Framework 4.5 |
Seuil du tas d’objets volumineux
- Spécifie la taille du seuil, en octets, au dessus de laquelle les objets sont dirigés vers le tas d’objets volumineux (LOH).
- Le seuil par défaut est de 85 000 octets.
- La valeur que vous spécifiez doit être supérieure au seuil par défaut.
- La valeur peut être plafonnée par la durée d'exécution à la taille maximale possible pour la configuration actuelle. Vous pouvez inspecter la valeur en cours d’utilisation au moment de l’exécution via l’API GC.GetConfigurationVariables().
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.LOHThreshold |
valeur décimale | .NET Core 1.0 |
Variable d'environnement | COMPlus_GCLOHThreshold |
valeur hexadécimale | .NET Core 1.0 |
Variable d'environnement | DOTNET_GCLOHThreshold |
valeur hexadécimale | .NET 6 |
app.config pour .NET Framework | GCLOHThreshold | valeur décimale | .NET Framework 4.8 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemples
Fichier runtimeconfig.json :
{
"runtimeOptions": {
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
}
Fichier runtimeconfig.template.json :
{
"configProperties": {
"System.GC.LOHThreshold": 120000
}
}
Conseil
Si vous définissez l’option dans runtimeconfig.json, spécifiez une valeur décimale. Si vous définissez l’option en tant que variable d’environnement, spécifiez une valeur hexadécimale. Par exemple, pour définir une taille de seuil de 120 000 octets, les valeurs sont 120000 pour le fichier JSON et 0x1D4C0 ou 1D4C0 pour la variable d’environnement.
GC autonome
Pour utiliser un garbage collector autonome au lieu de l’implémentation GC par défaut, vous pouvez spécifier le chemin d’accès (dans .NET 9 et versions ultérieures) ou le nom d’une bibliothèque native GC.
Chemin d’accès
- Spécifie le chemin complet d’une bibliothèque native GC que le runtime charge à la place de l’implémentation GC par défaut. Pour être sécurisé, cet emplacement doit être protégé contre les falsifications potentiellement malveillantes.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.Path |
string_path | .NET 9 |
Variable d'environnement | DOTNET_GCPath |
string_path | .NET 9 |
Nom
Spécifie le nom d’une bibliothèque native GC que le runtime charge à la place de l’implémentation GC par défaut. Le comportement a changé dans .NET 9 avec l’introduction de la configuration path .
Dans .NET 8 et les versions précédentes :
- Si seul un nom de la bibliothèque est spécifié, la bibliothèque doit résider dans le même répertoire que le runtime .NET (coreclr.dll sur Windows, libcoreclr.so sur Linux ou libcoreclr.dylib sur OSX).
- La valeur peut également être un chemin relatif, par exemple, si vous spécifiez .. \clrgc.dll » sur Windows, clrgc.dll est chargé à partir du répertoire parent du répertoire du runtime .NET.
Dans .NET 9 et versions ultérieures, cette valeur spécifie un nom de fichier uniquement (les chemins d’accès ne sont pas autorisés) :
- .NET recherche le nom que vous spécifiez dans le répertoire où réside l’assembly qui contient la méthode de
Main
votre application. - Si le fichier est introuvable, le répertoire du runtime .NET est recherché.
Ce paramètre de configuration est ignoré si la configuration du chemin d’accès est spécifiée.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.Name |
string_name | .NET 7 |
Variable d'environnement | COMPlus_GCName |
string_name | .NET Core 2.0 |
Variable d'environnement | DOTNET_GCName |
string_name | .NET 6 |
Conserver la mémoire
- Configure le récupérateur de mémoire pour conserver la mémoire, au prix de nettoyages de la mémoire plus fréquents et de temps de pause éventuellement plus longs.
- La valeur par défaut est 0 : cela n’implique aucune modification.
- Outre la valeur par défaut 0, les valeurs comprises entre 1 et 9 (inclus) sont valides. Plus la valeur est élevée, plus le récupérateur de mémoire tente de conserver la mémoire et donc de garder le tas petit.
- Si la valeur est différente de zéro, le tas d’objets volumineux est compacté automatiquement s’il est trop fragmenté.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
runtimeconfig.json | System.GC.ConserveMemory |
0 - 9 |
.NET 6 |
Variable d’environnement | COMPlus_GCConserveMemory |
0 -9 |
.NET Framework 4.8 |
Variable d'environnement | DOTNET_GCConserveMemory |
0 -9 |
.NET 6 |
app.config pour .NET Framework | GCConserveMemory | 0 -9 |
.NET Framework 4.8 |
Ce paramètre de configuration n'a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.
Exemple de fichier app.config :
<configuration>
<runtime>
<GCConserveMemory enabled="5"/>
</runtime>
</configuration>
Conseil
Testez différents nombres pour voir quelle valeur vous convient le mieux. Commencez par une valeur comprise entre 5 et 7.
DATAS (Dynamic Adaptation To Application Sizes)
- Configure le garbage collector pour utiliser DATAS. DATAS s’adapte aux besoins en mémoire de l’application, ce qui signifie que la taille du tas de l’application doit être proportionnelle à la taille des données de longue durée.
- Activé par défaut à partir de .NET 9.
Nom du paramètre | Valeurs | Version introduite | |
---|---|---|---|
Variable d'environnement | DOTNET_GCDynamicAdaptationMode |
1 – activé0 - désactivé |
.NET 8 |
Propriété MSBuild | GarbageCollectionAdaptationMode |
1 - activé0 - désactivé |
.NET 8 |
runtimeconfig.json | System.GC.DynamicAdaptationMode |
1 - activé0 - désactivé |
.NET 8 |
Ce paramètre de configuration n’a pas de propriété MSBuild spécifique. Toutefois, vous pouvez ajouter un élément MSBuild RuntimeHostConfigurationOption
à la place. Utilisez le nom du paramètre runtimeconfig.json comme valeur de l’attribut Include
. Pour obtenir un exemple, consultez les propriétés MSBuild.