Nettoyage de la mémoire d’arrière-plan

Avec le garbage collection (GC) en arrière-plan, les générations éphémères (0 et 1) sont collectées si nécessaire pendant la collecte de la génération 2. Le garbage collection en arrière-plan est effectué sur un ou plusieurs threads dédiés, selon qu’il s’agit d’un GC de station de travail ou de serveur, et s’applique uniquement aux collections de génération 2.

Le garbage collection en arrière-plan est activé par défaut. Il peut être activé ou désactivé avec le paramètre de configuration gcConcurrent dans les applications .NET Framework ou le paramètre System.GC.Concurrent dans les applications .NET Core et .NET 5 et versions ultérieures.

Notes

Le garbage collection en arrière-plan remplace le garbage collection simultané et est disponible dans .NET Framework 4 et versions ultérieures. Dans .NET Framework 4, il est pris en charge uniquement pour le garbage collection de station de travail. Depuis .NET Framework 4.5, le garbage collection en arrière-plan est disponible pour les deux opérations garbage collection de station de travail et de serveur.

Une collecte sur des générations éphémères pendant le garbage collection d’arrière-plan est appelée garbage collection de premier plan. Lorsque des opérations garbage collection de premier plan ont lieu, tous les threads managés sont suspendus.

Lorsque le garbage collection d’arrière-plan est en cours et que vous avez alloué assez d’objets dans la génération 0, le CLR exécute un garbage collection de premier plan de génération 0 ou 1. Le thread de garbage collection d'arrière-plan dédié vérifie des points sécurisés fréquents de façon à déterminer s'il existe une demande de garbage collection de premier plan. Le cas échéant, la collecte d'arrière-plan s'interrompt afin que le garbage collection de premier plan puisse se produire. Une fois le garbage collection de premier plan terminé, le thread de garbage collection d’arrière-plan dédié et les threads utilisateur reprennent.

Le garbage collection d'arrière-plan supprime les restrictions d'allocation imposées par le garbage collection simultané, car des opérations garbage collection éphémères peuvent se produire pendant le garbage collection d'arrière-plan. Le garbage collection en arrière-plan peut supprimer les objets morts dans les générations éphémères. Il peut également développer le tas si nécessaire pendant un garbage collection de génération 1.

GC de station de travail et serveur en arrière-plan

À compter de .NET Framework 4.5, le nettoyage de la mémoire en arrière-plan est disponible pour le GC serveur. Le GC en arrière-plan est le mode par défaut pour le garbage collection de serveur.

Le garbage collection de serveur en arrière-plan fonctionne de la même façon que le garbage collection de station de travail en arrière-plan, avec quelques différences :

  • Le garbage collection de station de travail en arrière-plan utilise un thread de garbage collection en arrière-plan dédié, tandis que le garbage collection de serveur en arrière-plan utilise plusieurs threads. En règle générale, il existe un thread dédié pour chaque processeur logique.

  • Contrairement au thread du garbage collection de station de travail en arrière-plan, les threads de GC serveur en arrière-plan n’expirent pas.

L’illustration suivante montre le nettoyage de la mémoire en arrière-plan effectué sur un thread dédié distinct, sur une station de travail :

Background workstation garbage collection

L’illustration suivante montre le nettoyage de la mémoire serveur en arrière-plan effectué sur un thread dédié distinct :

Background server garbage collection

Garbage collection simultané

Conseil

Cette section s’applique à :

  • .NET Framework 3.5 et versions antérieures pour le garbage collection des stations de travail
  • .NET Framework 4 et versions antérieures pour le garbage collection de serveur

Le garbage collection simultané est remplacé par le garbage collection en arrière-plan dans les versions ultérieures.

Avec le garbage collection de station de travail ou de serveur, vous pouvez activer un garbage collection simultané, ce qui permet aux threads de fonctionner simultanément avec un thread dédié qui exécute le garbage collection pendant une grande partie de la durée de ce dernier. Cette option affecte uniquement les opérations garbage collection de génération 2. Les générations 0 et 1 sont toujours non simultanées, car elles se terminent rapidement.

Le garbage collection simultané permet aux applications interactives d'être plus réactives en réduisant les pauses d'une collection. Les threads managés peuvent continuer à s'exécuter une grande partie de la durée du garbage collection simultané. Cette conception génère des pauses plus courtes pendant l’opération garbage collection.

Le garbage collection simultané est exécuté sur un thread dédié. Par défaut, le CLR exécute le garbage collection de station de travail avec le garbage collection simultané activé sur les ordinateurs monoprocesseur et multiprocesseur.

L'illustration suivante montre le garbage collection simultané exécuté sur un thread dédié différent.

Concurrent Garbage Collection Threads

Voir aussi