Remarque
L’accès à cette page requiert une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page requiert 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 durée pendant laquelle le collecteur de déchets est actif est appelée latence.
Dans certaines situations, comme lorsqu'une application récupère des données ou affiche du contenu, une collecte des déchets complète peut se produire à un moment critique et entraver les performances. Vous pouvez ajuster l'intrusivité du ramasse-miettes en définissant la propriété GCSettings.LatencyMode sur l'une des valeurs System.Runtime.GCLatencyMode.
Paramètres à faible latence
Utiliser un paramètre de latence « faible » signifie que le collecteur de déchets interrompt moins votre application. Le nettoyage de la mémoire 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 subit une pression mémoire, le collecteur de déchets déclenche une collecte, ce qui peut brièvement suspendre l'application et perturber une opération critique en termes de temps. Ce paramètre est disponible uniquement pour le garbage collection des stations de travail.
GCLatencyMode.SustainedLowLatency supprime les collections de génération 2 au premier plan 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 ramasse-miettes des stations de travail et des serveurs. Ce paramètre ne peut pas être utilisé si la garbage collection en arrière-plan est désactivée.
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
generationparamè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 nettoyage de la mémoire en arrière-plan est désactivé, il s’agit du mode par défaut pour le nettoyage de la mémoire de la station de travail et du serveur. 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 ramassage des ordures sur les stations de travail et les serveurs. Toutefois, si une application est hébergée, les paramètres du récupérateur de mémoire 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 ramasse-miettes peuvent être perturbantes. 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 limitée, mais potentiellement plus longue, pendant laquelle les interruptions du collecteur de déchets 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 augmente davantage la taille du tas managé que les 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. Vous pouvez recevoir des notifications de mémoire insuffisante, car le garbage collection récupère moins d'objets.
En mode de latence faible, réduisez le nombre de nouvelles allocations, notamment les allocations sur le tas des objets volumineux et les objets épinglés.
N'oubliez pas les threads qui peuvent être à l'origine d'allocations. Étant donné que le paramètre de propriété LatencyMode est à l’échelle du processus, les exceptions OutOfMemoryException 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.