2008-09-13 65 views
13

有沒有人知道一種方法來找出一個對象的實例正在使用多少內存?找出C#中的對象正在使用多少內存?

例如,如果我有以下對象的實例:

TestClass tc = new TestClass();

有沒有辦法找出實例tc正在使用多少內存?

問一個問題的原因是,儘管C#已經內置了內存管理,但我經常遇到不清除對象實例的問題(例如,跟蹤某個事物的List)。

有幾個相當不錯的內存分析器(例如ANTS Profiler),但在多線程環境下很難弄清楚什麼屬於哪裏,即使使用這些工具。

回答

2

我對MemProfiler有很好的體驗。它爲您提供了何時創建對象的堆棧痕跡以及該對象仍未被垃圾收集的所有圖形。

7

如果你不想在代碼本身做到這一點,我假設基於你的ANTS參考,嘗試看看CLRProfiler(目前v2.0)。它是免費的,如果你不介意相當簡單的用戶界面,它可以提供有價值的信息。它會讓你深入瞭解各種統計數據。我曾用它作爲尋找記憶韭菜的工具。

這裏下載:http://www.microsoft.com/downloads/details.aspx?FamilyId=A362781C-3870-43BE-8926-862B40AA0CD0&displaylang=en

如果你想做到這一點在代碼中,CLR已剖析,你可以使用的API。如果您在CLRProfiler中找到信息,由於它使用這些API,您應該也可以在代碼中執行此操作。這裏更多的信息: http://msdn.microsoft.com/de-de/magazine/cc300553(en-us).aspx

(它並不像使用WinDbg成爲一個神祕的,而是準備做強大深入CLR)

3

CLR Profiler,這是由微軟提供免費做了很好的工作在這種類型的東西。

整個剖析器的介紹可以下載here。還有實踐團隊put something一起回來,詳細介紹瞭如何使用探查器。

它在向您顯示在這些線程中創建的不同線程和對象時做了相當合理的工作。

希望這會流露出一些光芒。開心剖析!

相關問題