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.
Pour récupérer des objets, le garbage collector (GC) doit arrêter tous les threads en cours d’exécution dans une application. La période pendant laquelle le garbage collector est actif est appelé latence.
Dans certaines situations, par exemple lorsqu’une application récupère des données ou affiche du contenu, un garbage collection complet peut se produire à un moment critique et entraver les performances. Vous pouvez ajuster l’intrusivité du garbage collector en définissant la GCSettings.LatencyMode propriété sur l’une des System.Runtime.GCLatencyMode valeurs.
Paramètres à faible latence
L’utilisation d’un paramètre de latence « faible » signifie que le garbage collector intrus est inférieur à votre application. Le garbage collection est plus conservateur sur la récupération de la mémoire.
L’énumération System.Runtime.GCLatencyMode fournit deux paramètres à faible latence :
GCLatencyMode.LowLatency supprime les collections de génération 2 et effectue uniquement des collections de génération 0 et 1. Elle ne peut être utilisée que pendant de courtes périodes. Pendant de longues périodes, si le système est sous pression mémoire, le garbage collector déclenche un regroupement, ce qui peut brièvement suspendre l’application et perturber une opération critique. Ce paramètre est disponible uniquement pour le garbage collection de stations de travail.
GCLatencyMode.SustainedLowLatency supprime les collections de premier plan 2 et effectue uniquement les collections de génération 0, 1 et de génération 2 d’arrière-plan. Il peut être utilisé pendant des périodes plus longues et est disponible pour le garbage collection de stations de travail et de serveur. Ce paramètre ne peut pas être utilisé si le garbage collection d’arrière-plan est désactivé.
Pendant les périodes de faible latence, les collections de génération 2 sont supprimées, sauf si les éléments suivants se produisent :
Le système reçoit une notification de mémoire faible du système d’exploitation.
Le code d’application induise une collection en appelant la GC.Collect méthode et en spécifiant 2 pour le
generation
paramètre.
Scénarios
Le tableau suivant répertorie les scénarios d’application pour utiliser les GCLatencyMode valeurs :
Mode de latence | Scénarios d’application |
---|---|
Batch | Pour les applications qui n’ont pas d’interface utilisateur ou d’opérations côté serveur. Lorsque le garbage collection en arrière-plan est désactivé, il s’agit du mode par défaut pour la station de travail et le garbage collection de serveurs. Batch le mode remplace également le paramètre gcConcurrent , autrement dit, empêche les regroupements en arrière-plan ou simultanés. |
Interactive | Pour la plupart des applications qui ont une interface utilisateur. Il s’agit du mode par défaut pour le garbage collection de stations de travail et de serveur. Toutefois, si une application est hébergée, les paramètres du garbage collector du processus d’hébergement sont prioritaires. |
LowLatency | Pour les applications qui ont des opérations à court terme et sensibles au temps pendant lesquelles les interruptions du garbage collector peuvent être perturbatrices. Par exemple, les applications qui affichent des animations ou des fonctions d’acquisition de données. |
SustainedLowLatency | Pour les applications qui ont des opérations sensibles au temps pour une durée autonome, mais potentiellement plus longue pendant laquelle les interruptions du garbage collector peuvent être perturbatrices. Par exemple, les applications qui ont besoin de temps de réponse rapides à mesure que les données du marché changent pendant les heures de négociation. Ce mode entraîne une taille de tas managée plus grande que d’autres modes. Étant donné qu’il ne compacte pas le tas managé, une fragmentation plus élevée est possible. Vérifiez que la mémoire suffisante est disponible. |
Recommandations relatives à l’utilisation d’une faible latence
Lorsque vous utilisez le mode GCLatencyMode.LowLatency , tenez compte des instructions suivantes :
Conservez la période de temps en faible latence aussi courte que possible.
Évitez d’allouer de grandes quantités de mémoire pendant les périodes de faible latence. Les notifications de mémoire faible peuvent se produire, car le garbage collection récupère moins d’objets.
En mode faible latence, réduisez le nombre de nouvelles allocations, en particulier les allocations sur le tas d’objets volumineux et les objets épinglés.
N’oubliez pas les threads qui peuvent être alloués. Étant donné que le paramètre de propriété est à l’échelle du LatencyMode processus, OutOfMemoryException les exceptions peuvent être générées sur n’importe quel thread qui alloue.
Encapsulez le code à faible latence dans les régions d’exécution contraintes. Pour plus d’informations, consultez régions d’exécution contraintes.
Vous pouvez forcer les regroupements de génération 2 pendant une période à faible latence en appelant la GC.Collect(Int32, GCCollectionMode) méthode.