5

我们有一个存在内存泄漏的 ac# .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 打开它时,转储最初打开得很好。但是,当我单击Debug Managed Memory 操作时,我收到以下错误消息:

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

我是在 Windows 和托管内存环境中解决内存泄漏问题的新手,对所涉及的工具几乎一无所知。我对我得到的错误进行了谷歌搜索,但没有找到任何东西。任何帮助表示赞赏。如果我遗漏了一些明显的东西,我深表歉意 - 初级开发人员在这里 :-)

4

3 回答 3

2

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

  1. 你的泄漏点在哪里?[使用 WinDbg、SOS 和 GCRoot 诊断 .NET 内存泄漏]
  2. 使用 windbg 使用内存转储调试托管代码内存泄漏

如果你不喜欢 Windbg,DebugDiag工具在追踪内存泄漏方面也是非常有效的工具。

于 2013-10-22T15:58:35.840 回答
1

请参阅此链接,它仅适用于在 .Net 4.5 下运行的进程

在开始之前,关于本文中讨论的“调试托管内存”功能有几点需要注意:

  1. 该选项仅在 Visual Studio 2013 终极版的转储摘要页面中可用。如果您使用的是高级版或专业版,您将看不到该选项
  2. 收集转储文件的进程必须在 .NET 4.5 或更高版本上运行。如果转储是在 3.5 或更早版本上收集的,则不会出现该选项,如果它是在 4.0 上收集的,它将无法启动并显示错误消息。
于 2014-08-27T09:59:42.877 回答
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

于 2016-02-09T11:44:45.657 回答