2010-01-22 3 views
0

J'ai une fuite de mémoire lors de l'appel SmtpClient.Send().SmtpClient.Send provoque une fuite de mémoire

J'ai un service pour envoyer des emails. J'ai remarqué une fuite de mémoire dans TaskManager. J'ai commenté la ligne SmtpClient.Send(), et quand j'ai redémarré le service, j'ai remarqué que l'utilisation de la mémoire n'a pas augmenté.

+0

Eh bien génial ... Pouvez-vous poster plus de détails? Comment avez-vous découvert qu'il y a une fuite de mémoire dans Send()? Pouvez-vous poster la sortie de l'outil que vous avez utilisé? – A9S6

+0

J'ai un service pour envoyer des mails. La fuite de mémoire que j'ai remarquée par TaskManager. J'ai commenté la ligne SMTPClient.Send() et lorsque j'ai redémarré le service, j'ai remarqué que la mémoire ne grandissait pas. – Wilson

Répondre

3

Il est très fréquent de supposer que Taskmgr.exe est un outil de détection de fuite. La combinaison du garbage collector .NET et du gestionnaire de tas Windows est beaucoup trop sophistiquée pour être rétro-conçue à partir des nombres que vous voyez dans cet outil. Prouvez-le vous-même en envoyant des milliers d'e-mails. Si SmtpClient.Send() fuit vraiment alors votre programme se bloquera rapidement avec une exception OutOfMemory. Obtenez plus d'informations sur l'utilisation de la mémoire d'un programme .NET avec Perfmon.exe et les compteurs de performance dans la catégorie .NET CLR Memory. Et un bon livre, comme le CLR de Richter via C#.

+0

Merci pour la réponse, mais j'ai vérifié la mémoire avec d'autres outils aussi, et le résultat est le même. – Wilson

+0

Nous ne pouvons pas regarder par-dessus votre épaule. Je ne pense pas que quiconque puisse vous aider jusqu'à ce que vous documentiez ce que vous avez trouvé avec ces "autres outils". –

+0

J'ai utilisé le compteur de performance, et obtenir le même résultat – Wilson