Bonjour,
Je suis sur un projet où j'ai un problème avec la mémoire qui gonfle jusqu'à la saturer.
Du coup, j'ai fait un timer qui va forcer le garbage collector à faire son travail avec le code suivant :
Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 Logger.Fatal("GC 1"); GC.Collect(); Logger.Fatal("GC 2"); GC.WaitForPendingFinalizers(); Logger.Fatal("GC 3"); GC.WaitForFullGCComplete(); Logger.Fatal("GC 4"); GC.Collect(); Logger.Fatal("GC 5")
Ce code est dans une DLL sur laquelle je m'appuie avec un projet Test, un exe console, et un projet Service, pour monter le programme en service windows.
Sur le PC de développement (Win 11), ce code fonctionne à merveille, que je sois en console ou en service.
Cette semaine, je viens de monter le projet sur un serveur Win 2019 pour le mettre sur la machine de production.
Lorsque je lance le projet en mode console, tout va bien
Par contre, lorsqu'il est en service, je n'ai dans mes log que GC1 et GC2 et le thread reste coincé sur WaitForPendingFinalizers pas de GC 3/4/5 ?
Ma question est la suivante : Pourquoi ça fonctionne en mode console et service sur Win 11 et que seule la console fonctionne sur Win 2019 ?
Pour information, j'ai ajouter un log au début et à la fin de tous les destructeurs du projet mais aucun n'est exécuté (normal, ce sont tous des objets IDisposable et lors de l'appel de Dispose(), il y a la ligne GC.SuppressFinalize(this);)
D'ailleurs pourquoi le GC ne fait pas sont travail initialement aussi ?
Merci
P.S. : Le service doit tourner H24 et 7/7








Répondre avec citation





Partager