如何研究.NET中的非托管内存泄漏?

我有一个在MSMQ上运行的WCF服务。 内存随着时间的推移逐渐增加,表明存在某种内存泄漏。 我在本地运行该服务并使用PerfMon监控一些计数器。 总CLR内存管理堆字节保持相对恒定,而进程的私有字节随时间增加。 这让我相信存在某种非托管内存泄漏。 假设非托管内存泄漏是问题,我该如何解决这个问题? 是否有任何工具可以用来向我提供有关导致非托管内存泄漏的提示? 此外,我的所有服务都是从事务队列中读取并写入数据库,所有这些都是DTC事务的一部分(通过要求服务合同上的事务来处理)。 我没有明确地使用COM或DllImports做任何事情。

提前致谢!

如果您愿意了解windbg( http://www.microsoft.com/whdc/devtools/debugging/default.mspx ),本博客将为您提供帮助。

http://blogs.msdn.com/tess/default.aspx

您可以使用Windbg分析进程堆。 有一些文章和备忘单显示了如何执行此操作,例如使用Windbg进行内存泄漏检测

确保在使用后关闭服务客户端。 就像是

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

Ants Profiler值得考虑。 据我所知,您可以下载试用版。