Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Dans la collecte de déchets en arrière-plan (GC), les générations éphémères (0 et 1) sont rassemblées si nécessaire pendant que le regroupement de la génération 2 est en cours. Le nettoyage de la mémoire (GC) 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 d’un GC de serveur, et s’applique uniquement aux collections de génération 2.
Le nettoyage de la mémoire 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 .NET Core et .NET 5 et les applications ultérieures.
Remarque
La collecte des ordures en arrière-plan remplace la collecte des ordures simultanée et est disponible dans .NET Framework 4 et versions ultérieures. Dans .NET Framework 4, il est pris en charge uniquement pour le nettoyage de la mémoire station de travail. À partir de .NET Framework 4.5, la collecte en arrière-plan des ordures est disponible pour la collecte des ordures de stations de travail et de serveur.
Une collecte sur des générations éphémères pendant le nettoyage de la mémoire en arrière-plan est appelée nettoyage de la mémoire de premier plan. Lorsque des opérations garbage collection de premier plan ont lieu, tous les threads managés sont suspendus.
Lorsque le nettoyage de la mémoire en 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 nettoyage de la mémoire 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. Si tel est le cas, la collection d’arrière-plan se suspend pour permettre à la collecte de déchets de premier plan de se produire. Une fois le nettoyage de la mémoire de premier plan terminé, les threads de nettoyage de la mémoire en arrière-plan dédiés 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 nettoyage de la mémoire en arrière-plan peut supprimer des objets morts dans des générations éphémères. Il peut également développer le tas si nécessaire pendant un nettoyage de la mémoire de génération 1.
Station de travail en arrière-plan par rapport au nettoyage de la mémoire (GC) du serveur
À compter de .NET Framework 4.5, le nettoyage de la mémoire en arrière-plan est disponible pour le nettoyage de la mémoire (GC) serveur. Le nettoyage de la mémoire (GC) en arrière-plan est le mode par défaut pour le nettoyage de la mémoire du serveur.
Les fonctions de gestion des déchets de serveurs en tâche de fond sont similaires à la gestion des déchets de stations de travail en tâche de fond, mais il existe quelques différences :
Le nettoyage de la mémoire en arrière-plan pour les stations de travail utilise un thread de nettoyage de la mémoire en arrière-plan dédié, tandis que le nettoyage de la mémoire en arrière-plan pour les serveurs utilise plusieurs threads. En règle générale, il existe un thread dédié pour chaque processeur logique.
Contrairement au thread de nettoyage de la mémoire en arrière-plan de la station de travail, les threads de nettoyage de la mémoire (GC) du serveur en arrière-plan n'ont pas de délai d'expiration.
L’illustration suivante montre le nettoyage de la mémoire de station de travail en arrière-plan effectué sur un thread dédié distinct :
L’illustration suivante montre le nettoyage de la mémoire de serveur en arrière-plan effectué sur des threads dédiés distincts :
Garbage collection simultané
Conseil / Astuce
Cette section s’applique à :
- .NET Framework 3.5 et versions antérieures pour la collecte des objets sur les stations de travail
- .NET Framework 4 et versions antérieures pour la collecte de déchets serveur
Le nettoyage de la mémoire simultané est remplacé par le nettoyage de la mémoire en arrière-plan dans les versions ultérieures.
Dans la collecte des ordures des stations de travail ou des serveurs, vous pouvez activer la collecte en parallèle, ce qui permet aux threads de s’exécuter simultanément avec un thread dédié qui effectue la collecte pendant la plupart de la durée de la collecte. Cette option affecte uniquement les nettoyages de la mémoire de génération 2. Les générations 0 et 1 sont toujours non simultanées car elles se terminent très rapidement.
La collecte des déchets concurrente permet aux applications interactives d’être plus réactives en minimisant les pauses lors de la collecte. Les threads managés peuvent continuer à s’exécuter pendant que le thread de ramasse-miettes simultané fonctionne la plupart du temps. Cette conception entraîne des pauses plus courtes pendant qu'un ramassage des ordures a lieu.
Le garbage collection simultané est exécuté sur un thread dédié. Par défaut, le CLR exécute le nettoyage de la mémoire avec le nettoyage de la mémoire simultané activé sur les ordinateurs à processeur unique et multiprocesseurs.
L’illustration suivante montre la collecte des déchets effectuée simultanément sur un thread dédié distinct.