Garbage collection de station de travail et de serveur

Le garbage collector s'ajuste automatiquement et peut travailler dans une large gamme de scénarios. Vous pouvez cependant définir le type de garbage collection 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 du comportement 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 le comportement GC par défaut.

    Le garbage collection de station de travail peut être simultané ou non simultané. Le garbage collection (ou arrière-plan) simultané permet aux threads managés de continuer à fonctionner pendant un garbage collection. Dans .NET Framework 4 et versions ultérieures, le garbage collection d’arrière-plan remplace le garbage collection simultané.

  • 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é.

Les illustrations suivantes montrent les threads dédiés qui exécutent un garbage collection sur un serveur :

Server Garbage Collection Threads

Considérations relatives aux performances

Garbage collector pour station de travail

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 sont généralement exécutés à la priorité normale, le garbage collector (qui s'exécute sur un thread de priorité normale) doit rivaliser avec 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.)

  • Le garbage collection de station de travail est toujours utilisé sur un ordinateur doté d’un processeur logique, indépendamment du 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 collection se produit sur plusieurs threads dédiés. Sur Windows, ces threads s’exécutent au niveau de priorité THREAD_PRIORITY_HIGHEST.

  • 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 tas de petits objets et un tas d'objets volumineux, et tous les tas peuvent faire l'objet d'accès par du 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. Cependant, il ne s'agit que d'une généralisation : la taille de 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 garbage collection de serveur peut consommer beaucoup de ressources. Par exemple, imaginez que 12 processus utilisent le GC de serveur s’exécutant 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 provoquera moins de changements de contexte, ce qui peut améliorer les performances.

Voir aussi