J'ai créé un service Windows qui interroge en permanence une base de données. Pour ce faire, j'ai une minuterie en place. Chaque fois que j'interroge une table de base de données, j'ouvre une connexion et la ferme immédiatement après que mon travail soit terminé. En ce moment, je fais cela toutes les 20 secondes à des fins de test, mais plus tard cette fois pourrait augmenter de 5 à 10 minutes. Que se passe-t-il chaque fois que la table de base de données est interrogée, il y a une augmentation de 10-12 Ko de la taille de la mémoire du service en cours d'exécution. C'est ce que je peux voir dans le gestionnaire de tâches. Y a-t-il un moyen de contrôler cela?Comment contrôler la taille de la mémoire du service Windows en continu?
Répondre
La mémoire d'une application .NET est gérée par le CLR et il n'est pas recommandé de l'interférer. Je voudrais plutôt vous conseiller de profiler votre service et essayer de comprendre pourquoi il fuit la mémoire.
Que faites-vous avec les résultats de la requête? Les stockez-vous en mémoire (certains objets statiques)?
Assurez-vous d'utiliser des blocs using
autour des ressources jetables telles que SqlConnection
et SqlCommand
.
Le garbage collector doit prendre soin de libérer des ressources.
Le garbage collector devrait finir par libérer et libérer de la mémoire. Ce n'est pas basé sur le temps, mais plutôt sur la pression de la mémoire. Vous devriez donc pouvoir simuler des durées plus longues en augmentant simplement la fréquence de vos interrogations. Si le GC ne récupère aucune mémoire, vous avez une fuite quelque part. N'oubliez pas non plus que les connexions à une base de données utilisent généralement le regroupement de connexions, ce qui signifie que même si la connexion est terminée, un groupe de connexions actives est toujours en attente.
Mais il est très normal de ne pas voir la mémoire récupérée instantanément. Résistez à l'envie d'utiliser GC.Collect sauf si c'est juste pour le débogage. Cela pourrait avoir une incidence sur l'efficacité du ramasse-miettes.
Vérifiez si vous avez une fuite de mémoire. J'utilise Windbg pour cela, comme expliqué dans CLR Memory Leak:
!dumpheap -stat
pour voir les statistiques de chaque type!dumpheap -type <LeakedTypeName>
pour voir les instances du type de fuite supposée!gcroot <AddressOfObject>
pour suivre la référence qui épingle l'allocation (c'est-à-dire la cause de la fuite).
- 1. Comment vérifier la taille de la mémoire tampon restante du tuyau dans Windows en c/C++?
- 2. Comment contrôler la taille du composant MasterDetailsBlock dans Eclipse RCP?
- 3. Exécution du service Windows pour regarder le service en cours d'exécution augmenter la mémoire (fuite)
- 4. Comment contrôler la taille de la fenêtre shell Windows à partir d'un script Python?
- 5. Comment trouver la taille actuelle (en mémoire) de la table?
- 6. Comment trouver la taille de la mémoire virtuelle et la taille du cache d'un système Linux?
- 7. Correction de la taille du panneau Windows
- 8. Contrôler la mémoire réservée CLR SQL Server
- 9. Diffusion en continu de la vidéo en direct du service WCF vers Silverlight
- 10. Connaître la taille de l'empreinte mémoire
- 11. Comment obtenir la taille du contenu WebView
- 12. .NET Taille de la mémoire
- 13. Quelle est la taille maximale d'un fichier mappé en mémoire?
- 14. Exception de mémoire insuffisante - Arrêt du service Windows
- 15. Comment contrôler la taille des fichiers ASP.NET temporaires?
- 16. Comment mesurer la taille de la mémoire crête, etc. pendant un intervalle donné dans Windows
- 17. Comment faire du profilage de la mémoire sous Windows?
- 18. Meilleures pratiques pour la réponse en continu du service Web WCF
- 19. Comment contrôler à distance un service Windows avec ServiceController?
- 20. Enregistrer la taille du formulaire Windows
- 21. Comment regarder/modifier la taille de la mémoire tampon Windows pour rs232 (com)?
- 22. Comment obtenir la taille de la mémoire système disponible?
- 23. Comment faire pour augmenter la taille de la mémoire physique dans Windows 7 OS 32 bits
- 24. Comment obtenir l'utilisation de la mémoire sous Windows en C++
- 25. Comment contrôler la dimension/taille d'un terrain avec ggplot2
- 26. Problème de service C# windows avec mémoire (fuite de mémoire?)
- 27. Android ==> Simulateur VS Taille de la mémoire du périphérique?
- 28. Comment limiter la taille du tas?
- 29. La taille de la mémoire de la fonction JavaScript
- 30. taille de la mémoire de la structure de données Python
Modifiez l'intervalle d'interrogation à 1 milliseconde. Vous n'aurez pas à attendre si longtemps pour voir si le garbage collector fait son travail. –