2015-07-21 51 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,但在這種情況下,轉儲文件是無用的,您需要使用連接的分析器重新運行應用程序。