2013-05-06 88 views
2

我在這裏找到了許多有關使用此方法檢索當前內存使用情況的參考資料,在我的情況中,這是一個在64位上運行的32位進程Windows 7的我的代碼是使用process.WorkingSet64測量內存使用情況的異常

System.Diagnostics.Process[] processes = 
    System.Diagnostics.Process.GetProcessesByName("ProcessName"); 
if (processes.Count() != 1) 
{ 
    throw exception here, only one instance allowed; 
} 

System.Diagnostics.Process process = processes[0]; 
memoryUsed = process.WorkingSet64/(1024f * 1024f); 

我的應用程序動態分配和釋放堆內存,這點我可以用標準的Windows任務管理器確認。但是,每次我調用上面顯示的代碼時,使用的檢索內存總是高於先前的計數。此外,它不同意TaskManager。根據任務管理器,它大約爲249 MB,而編程方式爲280 MB。

我在做些傻事嗎?

回答

1

有多個與內存相關的進程計數器 - 工作集,私有工作集,共享工作集,提交大小,e.t.c.也許任務管理器正在顯示與您使用WorkingSet64檢索的內容不同的計數器。

嘗試向任務管理器添加所有與內存相關的列,以查看哪個與您的閱讀器更接近。

3

參見:

Process.WorkingSet64

備註:

此屬性返回的值表示由該方法中使用的 工作集存儲器中的當前大小。

Windows Task ManagerProcesses標籤顯示的默認存儲器列是Memory (Private Working Set)

內存 - 私人工作集工作集的

子集特異性 描述的存儲器的量進程正在使用的那個不能被其他進程共享的 。

換句話說,如果你想要完整的工作集,你可能想使用Resource Monitor

perfmon.exe /res

+0

非常感謝。任務管理器中的字段「Memory(私人工作集)」對應於Process.PrivateMemorySize64,而不是process.WorkingSet64。 – Paul 2013-05-07 08:27:28