是否可以訪問.NET應用程序中的託管堆,例如枚舉當前在那裏分配的對象?我可以通過.NET應用程序以編程方式查看託管堆內容嗎?
我知道有各種各樣的工具可以讓你做到這一點,但我寧願自己從代碼中做到這一點,以便我可以在自動化測試中使用它,例如檢查是否在關閉後處理和清理所有內容表單。
是否可以訪問.NET應用程序中的託管堆,例如枚舉當前在那裏分配的對象?我可以通過.NET應用程序以編程方式查看託管堆內容嗎?
我知道有各種各樣的工具可以讓你做到這一點,但我寧願自己從代碼中做到這一點,以便我可以在自動化測試中使用它,例如檢查是否在關閉後處理和清理所有內容表單。
http://sourceforge.net/projects/profilesharp/有一個可用的源代碼分析器。
可以使用CLR探查看到這樣的信息:
我知道,但那不是我所需要的。我想在我自己的C#應用程序中執行此操作,而不是使用某種外部交互式工具。所以基本上我想知道如何做自己(部分)CLR Profiler的功能。 – Timo 2009-07-26 15:26:41
Profiler(使用Profiling API)是「外部」組件(不完全是COM),因爲它們由CLR加載,並且有多種選項可以在託管的任何方法中進入/離開/尾部調用代碼(以及許多其他的東西)。它們是用非託管代碼編寫的。
AFAIK沒有辦法在內部獲取此信息,而無需調用監視CLR的分析器/調試器。 另外請記住,你不能總是得到這種信息,只有在你的代碼完成執行(許多Dispose()調用,終結等)後才存在。
現在您可以使用ClrMD Nuget包。
Nuget包實際上被稱爲Microsoft.Diagnostics.Runtime
。它將允許您查看堆中的對象以及CLR運行時的其他屬性。
無論如何/然而你找到你的解決方案,請張貼它。這對其他人肯定會有用。 – JoshJordan 2009-07-26 14:53:35