2012-12-14 20 views
-2

即時嘗試執行的操作是持續監視內存和CPU使用情況的所有窗口進程,如果某個進程超出限制,我應該能夠終止它(前提是此應用程序與管理員一起運行權利)我有以下代碼監視Windows進程過度使用內存

private PerformanceCounter theMemCounter = new PerformanceCounter(
    "Hyper-v Dynamic Memory VM", 
    "Physical Memory", 
    Process.GetCurrentProcess().ProcessName); 

但是,這是一個單一的過程,我應該知道過程的名稱,你可以請指導我這一點。

+0

當它使用最多的資源時,殺死一個進程是確保你對它產生的數據造成的損害是最佳不可恢復的最好方法。在繁忙的dbase引擎服務中尤其有效。 –

+0

@HansPassant我沒有得到你,你說的好嗎? – techno

+0

你能告訴我們downvoting的原因嗎? – techno

回答

2

Process.GetCurrentProcess僅指您的程序。嘗試Process.GetProcesses()檢索當前在機器上運行的所有進程。

+0

你能否詳細說明我是否要求監測 – techno

+0

不確定你在問什麼。 'GetProcesses'將返回一個描述當前正在計算機上運行的進程的'Process'實例數組。這些實例提供了豐富的信息,包括內存使用情況。他們還提供殺死或以其他方式與流程交互的方法。 我建議你看看[進程類文檔](http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx) – Pierre

1

下面是一些簡單的代碼就知道很多私有內存每道工藝間的存在:

 foreach (var process in Process.GetProcesses().OrderByDescending(process => process.PrivateMemorySize64)) 
     { 
      Console.WriteLine(process.ProcessName + ": " + process.PrivateMemorySize64 + " bytes"); 
     } 

不過,請聽Hans Passant,他是對的。不分青紅皁白地殺死進程並不是一個好主意。如果您擔心會佔用大量內存,請查看製造商是否有辦法限制它(如SQL Server),或者如果它是您自己的代碼,請修復它。

+0

謝謝有一種方法可以減少進程優先級比殺死它 – techno

+0

絕對有。 'process.PriorityClass'是一個讀/寫屬性,它需要一個'ProcessPriorityClass'枚舉值:'Idle','BelowNormal','Normal','AboveNormal','High'和'RealTime'。你可能想要'BelowNormal'。 –

+0

謝謝傑西,我的問題是越來越downvoted我已投票結束它,你能幫我改進問題或幫我關閉它。 – techno