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

时间:2010-05-17 14:57:55

标签: c# sql-server wcf memory-leaks msmq

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

提前致谢!

4 个答案:

答案 0 :(得分:4)

您可以使用Windbg分析进程堆。有一些文章和备忘单显示了如何执行此操作,如Memory Leak Detection Using Windbg

答案 1 :(得分:4)

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

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

答案 2 :(得分:1)

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

之类的东西
try {
... do work ...
Close();
} ... exception handling ... {
Abort();
}

答案 3 :(得分:-1)

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