想要請問如何取得工作管理員中處理程序的每支程式的CPU%值,不是取工作管理員詳細資料中的CPU%值哦
我用C#開發,
用ManagementObjectSearcher searcher = new ManagementObjectSearcher($"root\\CIMV2", "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process ");)方法取.
ViewCPU = Math.Round((Convert.ToDouble($"{Convert.ToInt64(obj["PercentProcessorTime"]):n0}") / Environment.ProcessorCount), 2);
->都取到作管理員詳細資料中的CPU%值(與工作管理員中處理程序的每支程式的CPU%值落差蠻大的)
要取的是圖一紅框的值
不是圖二紅框的值
謝謝
图一中的应该是对一个程序的多个process进行的聚合,比如"LINE",图一左边显示有箭头,展开后,你会发现有多个Process,对应的就是你图二中的多条记录,需要对其进行求和。
比如主process的pid为1924时,假设下面只有一层子进程,那么对应的数据范围sql应该为
select * from Win32_PerfFormattedData_PerfProc_Process where IDProcess=1924 or CreatingProcessID=1924
但是如果有多层子进程的话,这个会比较麻烦,需要用到递归,比如查到CreatingProcessID=1924 的所有进程,假设有123和456两个IDProcess,则需要继续向下查CreatingProcessID in (123,456),就这么一直查下去,直到查不出数据,再对前面所有查到的进程进行统计。