2015-07-21 20 views
0

我含在IIS托管我们的.NET应用程序捕获的内存数.dmp文件,我想通过某种分析仪,会告诉我哪些方法,我们的应用有助于不明原因的内存使用率来运行它们。如何确定从转储文件中导致高内存使用率的方法?

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

任何人都可以直接我的应用程序,可以轻松地帮助我想出解决办法,或者甚至可能教我如何使用DebugDiag资料或Visual Studio这样做呢?

我已经打了谷歌尽可能多的,但我根本没有成功地找到我要找的答案。我愿意购买一个工具,如果这是需要的,但我希望得到一些确认,无论购买什么都能够真正回答我的问题。

+0

这是一个软件推荐的边界,这是在stackoverflow中皱起眉头,但我认为这是一个很好的问题。我之前使用'windbg'来解决死锁问题,但不是为此。虽然我相信它应该会让你对你的记忆麻烦有所了解。我相信它是随Windows SDK一起发布的。蚂蚁分析器也可以用来诊断内存泄漏,我再也没有使用它。 –

+0

它也可能有助于看看http://stackoverflow.com/q/3927/2420536 –

+0

我刚刚在[Software Recommendations]上创建了一个类似的问题(http://softwarerecs.stackexchange.com/questions/24581/独立的净内存分析器)。我认为这个问题在这里是无关紧要的。您可以按照我的问题提问,或者根据您的具体要求提出新问题。 –

回答

0

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

一个good dump将包含.NET对象,所以你可以看到哪些类型都在增加,但对象不具有调用堆栈连接。

在天然世界(C++),则堆管理器的一个特征是一个调用栈附着到的对象。它被称为Create user stack database,可以使用GFlags工具启用,它是Debugging Tools for Windows的一部分。

这样的标志不恕我直言,不存在.NET和.NET以来带有其自身的堆管理器,使本地标志不会帮助。

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

  • 查找的对象是正在增加
  • 搜索你的源代码,这些对象的创作类型

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