2011-06-21 79 views

回答

1

正如其他人建議的內存分析器,Memprofiler絕對是最先進的(我試過所有現有的.NET分析器)。它有14天的試用期。

+0

從看着審訊看起來非常好! –

3

那麼來自ANTS的.NET Memory Profiler怎麼樣? 也許CLR分析器。

0

當我們遇到瓶頸時,我們的QA團隊使用http://www.jetbrains.com/profiler/來處理這種事情。我很確定它會通過方法調用給你一個分配列表。我會去安裝它,並檢查:)

0

好的舊windbg + sos + pdb將使傾銷。關於「在源代碼中他們被創建的地方」的一部分 - 沒有儀器或注入是不可能的。

3

如果您創建內存轉儲,則信息不可用。爲了收集這些信息,你必須監視正在運行的進程。你可以通過WinDbg啓動應用程序,並在你感興趣的所有構造函數上設置斷點(希望你不想看每一個對象)。

如果您創建斷點,那麼它會轉儲堆棧,您將擁有該對象的創建點。但是,請記住,在GC期間物體可能會四處移動,這會使堆疊物體變得困難(甚至在某些情況下不可能)。

由於您的問題標有性能和性能分析,因此我想知道您希望減少內存分配。爲什麼不看看創建的對象的數量(或者可能通過查看堆來查看創建的最大對象)。然後通過源代碼並找出創建這些實例的位置。

1

您需要.NET內存分析器。這些工具允許您跟蹤垃圾收集堆中的對象圖,並且可以非常有用地識別內存泄漏的來源。雖然他們可能不一定會告訴你創建對象的方法,但他們會告訴哪些類的實例保留在對象上,並允許您捕獲gc堆的快照。他們不需要修改源代碼。你可能想在 What Are Some Good .NET Profilers?