【问题标题】:How to research unmanaged memory leaks in .NET?如何研究 .NET 中的非托管内存泄漏?
【发布时间】:2011-02-20 11:05:08
【问题描述】:

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

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

          【讨论】:

          • finally 块中执行Close - 这样即使有异常也会发生...
          猜你喜欢
          • 2020-07-11
          • 2012-01-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-06-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多