Suspension du garbage collection pour des performances optimales
Dans une application .NET hautes performances gérant de vastes données, le désabonnement des objets peut constituer un goulot d'étranglement en termes de performances, en particulier lorsqu'il est associé à des frais généraux importants de collecte des déchets (GC). Cependant, il arrive de brèves périodes pendant lesquelles les retards du GC doivent être absolument évités.
.NET 4.6 introduit deux méthodes pour résoudre ce problème :
-
GC .TryStartNoGCRegion : Suspend temporairement le GC pour un code spécifique block.
-
GC.EndNoGCRegion: Reprend GC après le bloc de code se termine.
Utilisation :
using System;
private static bool UseNoGC()
{
if (GC.TryStartNoGCRegion())
{
// Code that should not be interrupted by GC
...
GC.EndNoGCRegion();
return true;
}
return false;
}
Copier après la connexion
Alternatives :
-
Système. GC.Collect : L'appel manuel de GC avant la période critique peut réduire la probabilité d'un retard pendant cette période. Cependant, la durée de la suppression du GC n'est pas garantie.
-
Gestion manuelle des ressources : La mise en œuvre d'une interface IDisposable personnalisée pour les classes critiques permet un contrôle manuel sur la durée de vie des objets, réduisant ainsi la charge sur GC.
Réduire le GC Transparent :
-
Réutiliser les objets : Évitez de créer et de supprimer un grand nombre d'objets de courte durée.
-
Utiliser des types de valeurs : Préférez les types valeur (par exemple, les structures) aux types référence (par exemple, les classes) lorsque cela est possible, car ils ne sont généralement pas suivis par GC.
-
Évitez les grands tableaux et collections : Divisez les grandes collections en morceaux plus petits pour minimiser les frais généraux du GC lors de leur collecte.
-
Utilisez des références faibles : Pour les objets qui ne sont pas immédiatement nécessaires, pensez à utiliser des références faibles pour éviter de les conserver en mémoire inutilement.
-
Optimisez le garbage collection : Utilisez des outils de profilage des performances pour identifier les domaines dans lesquels la surcharge du GC est élevée et optimisez ces parties du code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!