我有一个在MSMQ上运行的WCF服务。内存随着时间的推移逐渐增加,表明存在某种内存泄漏。我在本地运行该服务并使用PerfMon监控一些计数器。总CLR内存管理堆字节保持相对恒定,而进程的私有字节随时间增加。这让我相信存在某种非托管内存泄漏。假设存在非托管内存泄漏问题,我该如何解决这个问题?是否有任何工具可以用来向我提供有关导致非托管内存泄漏的提示?此外,我所有的服务都是从事务队列中读取并写入数据库,所有这些都是DTC事务的一部分(通过要求服务合同上的事务来处理)。我没有使用COM或DllImports明确做任何事情。
提前致谢!
答案 0 :(得分:4)
您可以使用Windbg分析进程堆。有一些文章和备忘单显示了如何执行此操作,如Memory Leak Detection Using Windbg
答案 1 :(得分:4)
如果您愿意了解windbg(http://www.microsoft.com/whdc/devtools/debugging/default.mspx),此博客将为您提供帮助。
答案 2 :(得分:1)
确保在使用后关闭服务客户端。
之类的东西try {
... do work ...
Close();
} ... exception handling ... {
Abort();
}
答案 3 :(得分:-1)
Ants Profiler值得考虑。据我所知,您可以下载试用版。