Process.GetProcesses() 範圍並不限於應用程式本身,它會返回系統中所有正在執行的 Process 資訊,這包括其他應用程式、系統服務以及其他使用者的 Process,但具體可見的範圍可能受到權限的限制。
WorkingSet64 是 Process 的實際記憶體使用量(物理記憶體),數值為 bytes。
Lambda Expression 應用 - TotalMemory
簡單來說就是在方法呼叫端傳入我們的條件 (像是傳入一個 Where 一樣),來決定內部的計算邏輯範圍
這個實作情境是這樣,使用 Process.GetProcesses() 取得所有 Process,並且篩選 > 20 MB 的 Process,最後計算前兩名的資訊
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| void Main() { DisplayMemory(memory => memory > 20 * 1024 * 1024); }
public class ProcessData { public int Id { get; set; } public long Memory { get; set; } public string Name{get;set;} }
public static void DisplayMemory(Func<long,bool> matchCritiria) { var processInfoList = new List<ProcessData>(); var systemProcesses = Process.GetProcesses(); foreach(var systemProcess in systemProcesses) { if(matchCritiria(systemProcess.WorkingSet64)) { processInfoList.Add(new ProcessData {Id = systemProcess.Id, Memory = systemProcess.WorkingSet64, Name = systemProcess.ProcessName}); } }
Console.WriteLine($"Total memory : {processInfoList.Sum(process => process.Memory) / 1024 / 1024} MB"); var top2MemoryResult = processInfoList.OrderByDescending(process => process.Memory) .Take(2) .Sum(process => process.Memory) / 1024 / 1024; Console.WriteLine("Memory consumed by the two most processes: {0} MB", top2MemoryResult);
var results = new { NumberOneProcessName = processInfoList.OrderByDescending(process => process.Memory) .FirstOrDefault().Name, NumberTwoProcessName = processInfoList.OrderByDescending(process => process.Memory) .Skip(1) .FirstOrDefault() .Name }; results.Dump();
}
public class ProcessData { public int Id { get; set;} public long Memory {get;set;} public string Name {get;set;} }
|
