如何确定从转储文件中获得高内存利用率的方法?

时间:2015-07-21 19:14:06

标签: .net memory-leaks debugdiag

我有几个.dmp个文件,其中包含从IIS中托管的.NET应用程序中捕获的内存,我想通过某种分析器运行它们,这些分析器会告诉我哪些方法导致无法解释的高内存我们的应用程序使用。

我尝试过DebugDiag分析以及Visual Studio附带的工具。我可以设法在内存中生成一个对象列表,但我不知道哪个方法生成对象。

任何人都可以将我引导到一个可以轻松帮助我解决这个问题的应用程序,或者甚至可以指导我如何使用DebugDiag或Visual Studio来执行此操作吗?

我已经尽可能地打击了Google,但我找不到我想要的答案。我愿意购买一个工具,如果这是需要的,但我想要一些确认,无论购买什么,实际上都能回答我的问题。

1 个答案:

答案 0 :(得分:0)

TL; DR:无法从转储文件中执行此操作。

good dump将包含.NET对象,因此您可以看到哪些类型正在增加,但是对象没有附加调用堆栈。

在本机世界(C ++)中,堆管理器的一个功能是将调用堆栈附加到对象。它被称为Create user stack database,可以使用GFlags工具启用,该工具是Debugging Tools for Windows的一部分。

这样的标志在.NET中不存在恕我直言,并且由于.NET自带了堆管理器,因此启用本机标志无济于事。

因此,您可以对转储文件采取的唯一方法是:

  • 查找正在增加的对象类型
  • 在源代码中搜索此类对象的创建

您可以使用memory profiler,但在这种情况下,转储文件无用,您需要在附加了分析器的情况下重新运行应用程序。