Partager via


Collecte des ordures des stations de travail et des serveurs

Le ramasse-miettes est auto-réglable et peut fonctionner dans un large éventail de scénarios. Toutefois, vous pouvez définir le type de collecte des ordures en fonction des caractéristiques de la charge de travail. Le CLR fournit les types de garbage collection suivants :

  • Garbage collection (GC) de station de travail, conçu pour les applications clientes. Il s’agit de la saveur GC par défaut pour les applications autonomes. Pour les applications hébergées, par exemple, celles hébergées par ASP.NET, l’hôte détermine la saveur gc par défaut.

    Le garbage collection de station de travail peut être simultané ou non simultané. La collecte des déchets simultanée (ou en arrière-plan) permet aux threads gérés de continuer leurs opérations pendant une collecte des déchets. Le ramassage des déchets en arrière-plan remplace le ramassage des déchets simultané dans .NET Framework 4 et les versions ultérieures.

  • Garbage collection de serveur, prévu pour les applications serveur qui ont besoin d'un débit et d'une extensibilité.

    • Dans .NET Core, le garbage collection de serveur peut être non simultané ou en arrière-plan.

    • Dans .NET Framework 4.5 et versions ultérieures, le garbage collection de serveurs peut être non simultané ou en arrière-plan. Dans .NET Framework 4 et versions antérieures, le garbage collection de serveur n’est pas simultané.

L’illustration suivante montre les threads dédiés qui effectuent le garbage collection sur un serveur :

Threads de garbage collection du serveur

Considérations relatives aux performances

Station de travail GC

Voici les considérations liées aux threads et aux performances pour le garbage collection de station de travail :

  • La collecte se produit sur le thread utilisateur qui a déclenché le garbage collection et reste à la même priorité. Étant donné que les threads utilisateur s’exécutent généralement en priorité normale, le garbage collector (qui s’exécute sur un thread de priorité normale) doit concurrencer d’autres threads pour le temps processeur. (Les threads qui exécutent du code natif ne sont pas suspendus sur le garbage collection de serveur ou de station de travail.)

  • La collecte des déchets de la station de travail est toujours utilisée sur un ordinateur qui n’a qu’un seul processeur logique, quel que soit le paramètre de configuration.

Garbage collector pour serveur

Voici les considérations liées aux threads et aux performances pour le garbage collection de serveur :

  • La collecte est effectuée sur plusieurs fils dédiés. Sur Windows, ces threads s’exécutent au THREAD_PRIORITY_HIGHEST niveau de la priorité.

  • Un tas et un thread dédié pour effectuer le garbage collection sont fournis pour chaque UC logique, et les tas sont collectés au même moment. Chaque tas contient un petit tas d’objets et un tas d’objets volumineux, et tous les tas sont accessibles par le code utilisateur. Les objets des différents tas peuvent faire référence les uns aux autres.

  • Étant donné que plusieurs threads de garbage collection fonctionnent ensemble, le garbage collection de serveur est plus rapide que le garbage collection de station de travail sur un tas de même taille.

  • Le garbage collection de serveur présente souvent des segments de plus grande taille. Toutefois, il s’agit uniquement d’une généralisation : la taille du segment est spécifique à l’implémentation et est susceptible de changer. N’émettez aucune hypothèse sur la taille des segments alloués par le garbage collector lors du paramétrage de votre application.

  • Le nettoyage de mémoire des serveurs peut être gourmand en ressources. Par exemple, imaginez qu’il existe 12 processus qui utilisent le GC de serveur qui s’exécute sur un ordinateur disposant de quatre processeurs logiques. Si tous les processus effectuent un garbage collection en même temps, ils interfèrent les uns avec les autres, car il y aurait 12 threads planifiés sur le même processeur logique. Si les processus sont actifs, il n’est pas judicieux qu’ils utilisent tous le GC de serveur.

Si vous exécutez des centaines d'instances d'une application, envisagez d'utiliser le garbage collection de station de travail avec le garbage collection simultané désactivé. Cela entraîne une réduction du nombre de changements de contexte, ce qui peut améliorer les performances.

Voir aussi