2013-01-07 50 views
2

背景如何從另一個進程獲取.NET CLR內存堆大小?

我們使用Telerik TestStudio(visual studio plugin)進行自動測試。 這連接到我們的WPF應用程序執行測試,所以自動化作爲一個進程運行,而我們的應用程序運行另一個進程。 現在我想測量和確保我們沒有任何內存泄漏或模擬,我們希望在開發過程中儘早看到它,然後纔到達客戶。

要測量內存是沒有問題的。但.NET CLR內存堆大小似乎更加棘手。

這是相同的結果作爲Windows性能監視器可以得到我之後我。 (PERFMON.EXE) perfmon.exe

我已經試過

垃圾收集器包含此信息爲我的過程,所以我不能用這個

var heap = GC.GetTotalMemory(); 

我曾嘗試是使用WMI類來得到這個,但沒有成功.. 有一個類intressting:Win32_PerfFormattedData_NETFramework_NETCLRMemory 所以我認爲我會試試看..

var searcher = new ManagementObjectSearcher(@"select * from Win32_PerfFormattedData_NETFramework_NETCLRMemory"); 
foreach (ManagementBaseObject baseObject in searcher.Get()) 
{ 
    var heap0 = baseObject["HeapSize0"]; 
    var heap1 = baseObject["HeapSize1"]; 
    var heap2 = baseObject["HeapSize2"]; 
} 

上面的問題是,Get()dos不會返回任何東西,如果我把斷點放在foreach循環的第一行,它不會進入。

問題

  • 有沒有在C#這樣做的其他方式?
  • 有沒有人試圖從以前的另一個過程中獲得此堆大小?
+4

使用PerformanceCounter類。 –

+0

感謝評論@HansPassant。我會檢查出來並返回結果。 –

回答

相關問題