分析内存转储以查找泄漏

时间:2013-10-22 15:37:32

标签: c# memory-leaks visual-studio-2013

我们有一个c#.NET应用程序,其中有内存泄漏。我使用procdump从生产机器的应用程序的运行实例中获取内存转储。生产机器运行32位Windows XP和.NET 4.0。

exe配置设置为.net 4.0

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />

当我将转储拉到我的开发盒,Windows 8.1 64位,并用VS 2013打开时,转储最初打开正常。但是,当我单击调试托管内存操作时,我收到以下错误消息:

  

此过程中使用的CLR版本不支持内存分析。

我刚刚对Windows和托管内存环境中的内存泄漏进行故障排除,并且对所涉及的工具几乎一无所知。我做了一个谷歌搜索我得到的错误,并没有找到任何东西。任何帮助表示赞赏。如果我错过了一些显而易见的东西,我很抱歉 - 这里的少年开发: - )

3 个答案:

答案 0 :(得分:2)

我不知道procdump是否可用于在.NET中查找内存泄漏。我尝试过的一种有效方法是:使用Windbg和SOS。有两篇文章解释了如何使用Windbg + SOS来跟踪.NET内存泄漏:

  1. Where's your leak at? [Using WinDbg, SOS, and GCRoot to diagnose a .NET memory leak]
  2. Debugging managed code memory leak with memory dump using windbg
  3. 如果你不喜欢Windbg,工具DebugDiag也是追踪内存泄漏的非常有效的工具。

答案 1 :(得分:1)

请参阅此link,它仅适用于在.Net 4.5下运行的流程

  

在开始之前,有一些关于“调试”的注意事项   本文讨论的“托管内存”功能:

     
      
  1. 该选项仅可在转储摘要页面中使用   Visual Studio 2013的终极版本。如果您使用的是Premium或   专业你不会看到选项
  2.   
  3. 收集转储文件的进程必须一直在.NET 4.5或更高版本上运行。如果转储收集在3.5或   之前该选项将不会出现,如果它是在4.0上收集的   将无法启动并显示错误消息。
  4.   

答案 2 :(得分:0)

  

从Windows 7 / Server 2008 R2开始,有一种方法可以创建进程的克隆并创建此克隆的转储,以便您不需要暂停您关注的进程。使用procdump -r在捕获转储时使用此功能。

     

您还可以使用捕获ETW跟踪并使用PerfView分析数据。

https://superuser.com/questions/846079/how-can-i-create-a-memory-dump-of-a-production-system-without-affecting-performa/846156#846156