我们有一个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和托管内存环境中的内存泄漏进行故障排除,并且对所涉及的工具几乎一无所知。我做了一个谷歌搜索我得到的错误,并没有找到任何东西。任何帮助表示赞赏。如果我错过了一些显而易见的东西,我很抱歉 - 这里的少年开发: - )
答案 0 :(得分:2)
我不知道procdump是否可用于在.NET中查找内存泄漏。我尝试过的一种有效方法是:使用Windbg和SOS。有两篇文章解释了如何使用Windbg + SOS来跟踪.NET内存泄漏:
答案 1 :(得分:1)
请参阅此link,它仅适用于在.Net 4.5下运行的流程
在开始之前,有一些关于“调试”的注意事项 本文讨论的“托管内存”功能:
- 该选项仅可在转储摘要页面中使用 Visual Studio 2013的终极版本。如果您使用的是Premium或 专业你不会看到选项
- 收集转储文件的进程必须一直在.NET 4.5或更高版本上运行。如果转储收集在3.5或 之前该选项将不会出现,如果它是在4.0上收集的 将无法启动并显示错误消息。
醇>
答案 2 :(得分:0)
从Windows 7 / Server 2008 R2开始,有一种方法可以创建进程的克隆并创建此克隆的转储,以便您不需要暂停您关注的进程。使用procdump -r在捕获转储时使用此功能。
您还可以使用捕获ETW跟踪并使用PerfView分析数据。