2010-05-17 4 views
24

J'ai un service WCF sur MSMQ. La mémoire augmente progressivement au fil du temps, indiquant qu'il existe une sorte de fuite de mémoire. J'ai exécuté le service localement et surveillé certains compteurs en utilisant PerfMon. Le total des octets de tas gérés par la mémoire CLR reste relativement constant, tandis que les octets privés du processus augmentent avec le temps. Cela m'amène à croire qu'il existe une sorte de fuite de mémoire non gérée. En supposant que la fuite de mémoire non managée est le problème, comment puis-je résoudre le problème? Y a-t-il des outils que je pourrais utiliser pour me donner des conseils sur ce qui cause la fuite de mémoire non gérée? De plus, tout ce que fait mon service consiste à lire dans la file d'attente transactionnelle et à écrire dans une base de données, le tout dans le cadre d'une transaction DTC (traitée sous le capot en exigeant une transaction sur le contrat de service). Je ne fais rien explicitement avec COM ou DllImports.Comment rechercher des fuites de mémoire non gérées dans .NET?

Merci d'avance!

Répondre

-1

Ants Profiler vaut la peine d'être considéré. Autant que je me souvienne, vous pouvez télécharger une version d'essai.

+18

ANTS Profiler ne prend pas en charge le profilage de mémoire non géré. – abhilash

3

Vous pouvez utiliser Windbg pour analyser le processus Heap. Il ya quelques articles et des triches montrant comment faire ceci, comme Memory Leak Detection Using Windbg

1

Assurez-vous que vous fermez le client de service après l'avoir utilisé. quelque chose comme

try { 
... do work ... 
Close(); 
} ... exception handling ... { 
Abort(); 
} 
+3

Faites le 'Close' dans le bloc' finally' - cela se produira même s'il y a une exception ... – Basic

Questions connexes