2011-09-25 136 views
6

是否有可能在每行執行後看到堆棧和堆棧的內容。我希望看到它,因爲它可以清楚地瞭解.Net中的內存分配和釋放。與您的如何在C#.Net中查看堆棧和堆棧中的對象

如果有任何文件或鏈接,將清除我的疑惑與您的答案,請分享。

+1

這是一個*很多數據,它可能不會告訴你很多。 (或者更糟糕的是,你會抱怨說,它從來沒有收集到你看到的20行代碼中的垃圾。)如果你對內存分配和垃圾收集有疑問,提出問題和/或尋求高級解釋,那更有可能清理一下。 – delnan

+0

當然,我現在肯定會這樣做 – funsukvangdu

回答

2

SOS或PssCor是沿着WinDbg方向開始的好地方。

一旦你把它整理出來,將WinDbg附加到您的進程,加載調試器擴展。例如:

.load C:\pathtoextensions\psscor4.dll 

之後,你可以發出!dumpheap!dumpstack命令。

這兩個命令的輸出都非常原始。 !dumpheap -stat將爲您提供堆的「統計」概覽。所有分配的類型,分配的數字和總共的字節數。

這不是一個超級簡單的任務。如果您以前沒有使用WinDbg,那麼需要花費一些時間才能獲得足夠的練習。

你可以做的是在使用!bpmd的方法上設置一個斷點,然後使用上面提到的命令,然後使用p命令重新執行,然後重新運行這些命令。

我確定還有其他商業工具,如ANTS ProfilerdotTrace可能會完成工作 - 但我對這兩種工具都沒有太多的經驗。

一旦你開始了,你可以詢問(新)關於SOS或Psscor的更具體的問題。

3

堆棧:

var stackInfo = new StackTrace(); 

堆?不,你需要使用分析器,調試器或合適的API。不是一個簡單的任務。如果您嘗試並遇到困難,最好提出一個更具體的問題。