0

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

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

谁能指导我使用一个可以轻松帮助我解决这个问题的应用程序,或者甚至可以指导我如何使用 DebugDiag 或 Visual Studio 来做到这一点?

我已经尽可能多地使用谷歌,但我根本没有成功找到我正在寻找的答案。如果需要的话,我愿意购买工具,但我想确认购买的任何东西实际上都能够回答我的问题。

4

1 回答 1

0

TL;DR:从转储文件中无法做到这一点。

一个好的转储将包含 .NET 对象,因此您可以看到哪些类型正在增加,但对象没有附加调用堆栈。

在本机世界 (C++) 中,堆管理器具有将调用堆栈附加到对象的功能。它称为创建用户堆栈数据库,可以使用 GFlags 工具启用,该工具是 Windows 调试工具的一部分。

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

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

  • 找到正在增加的对象的类型
  • 搜索您的源代码以创建此类对象

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

于 2015-09-17T21:41:55.273 回答