Modes de latence
Mise à jour : novembre 2007
Pour récupérer des objets, le garbage collector doit arrêter tous les threads en exécution de l'application. Dans quelques cas, par exemple lorsqu'une application récupère des données ou affiche le contenu, un garbage collection complet peut se produire à une heure critique et entraver la performance. Vous pouvez ajuster le niveau d'intrusion du garbage collector en affectant à la propriété LatencyMode l'une des valeurs GCLatencyMode.
La latence fait référence à l'heure à laquelle le garbage collector fait intrusion dans votre application. Pendant les périodes de faible latence, le garbage collector est plus modéré, et plus discret, pour récupérer des objets. Les collections de génération 2 se produisent moins fréquemment, ce qui fait que le jeu de travail de l'application grandisse au fil du temps. En conséquence, il est recommandé d'utiliser le mode LowLatency uniquement pendant la courte période où vous en avez besoin. Sinon, si le système fait l'objet d'une forte sollicitation de la mémoire, le garbage collector déclenchera une collection, laquelle peut suspendre l'application et interrompre une opération à heure critique.
Vous devez utiliser le mode de latence avec les applications comprenant un bloc de code qui s'exécute pendant une brève période de temps et avec un minimum d'interruptions de la part du runtime. Bien que le mode LowLatency soit conçu pour être utilisé dans les scénarios soumis à des contraintes de temps, il n'est pas prévu pour servir de solution pour les scénarios soumis à des contraintes en temps réel strictes.
Les tableaux suivants répertorient les scénarios d'application auxquels les valeurs GCLatencyMode sont appropriées.
Mode de latence |
Scénarios d'application |
---|---|
Pour les applications qui n'ont aucune interface utilisateur ou opération côté serveur.
|
|
Pour la plupart des applications qui ont une interface utilisateur. |
|
Pour les applications qui ont des opérations à court terme et à durée de vie critique lorsque les interruptions du garbage collector pourraient être provoquer des perturbations. Par exemple, les applications qui exécutent des fonctions de rendu d'animation ou d'acquisition de données. |
Modes de garbage collection par défaut
Si la propriété LatencyMode n'est pas spécifiée, le mode par défaut est le garbage collection simultané de la station de travail. Le mode dépend de la valeur de deux paramètres de configuration d'exécution:
-
S'il est activé, ce paramètre spécifie que le common language runtime exécute le garbage collection de la station de travail sur un thread séparé pour prendre en charge des opérations simultanées. Ce paramètre est activé par défaut.
-
S'il est activé, ce paramètre spécifie que le common language runtime exécute le garbage collection du serveur. Sinon, il exécute le garbage collection de la station de travail. Vous ne pouvez activer le garbage collection du serveur que sur les ordinateurs disposant de deux processeurs ou plus. Ce paramètre n'est pas activé par défaut.
Si ce paramètre est activé, <gcConcurrent> est automatiquement désactivé.
Les valeurs par défaut pour GCLatencyMode sont les suivantes :
Interactive lorsque <gcConcurrent> est activé et <gcServer> est désactivé.
Batch lorsque <gcConcurrent> est désactivé ou lorsque <gcConcurrent> et <gcServer> sont activés.
Remarque : |
---|
Le garbage collection simultané n'est pas pris en charge dans les applications exécutant l'émulateur WOW64 x86 sur les systèmes 64 bits qui implémentent l'architecture Intel Itanium (anciennement appelée IA-64). Pour plus d'informations sur l'utilisation de WOW64 sur les systèmes Windows 64 bits, consultez Exécution d'applications 32 bits (en anglais). |
Directives pour l'utilisation de la faible latence
Quand vous utilisez le mode LowLatency, tenez compte des indications suivantes :
Faites en sorte que la période de temps de latence faible soit la plus courte possible.
Évitez d'allouer de grandes quantités de mémoire pendant les périodes de latence faible. Les notifications de mémoire basse peuvent se produire parce que le garbage collection récupère moins d'objets.
En mode de latence faible, réduisez le nombre d'allocations que vous effectuez, notamment les allocations concernant le tas des objets volumineux et les objets épinglés.
Soyez attentif aux threads impliqués dans les allocations. Dans la mesure où le paramètre de propriété LatencyMode est de niveau processus, vous pourriez générer un OutOfMemoryException sur tout thread pouvant être impliqué dans une allocation.
Encapsulez le code de latence faible dans les région d'exécution limitée (pour plus d'informations, consultez Régions d'exécution soumises à la contrainte).
Vous pouvez forcer les collections de génération 2 pendant une période de latence basse en appelant la méthode GC.Collect(Int32, GCCollectionMode).
Voir aussi
Tâches
Comment : désactiver le garbage collection simultané