Как получить процессор и использование памяти процесса так же, как диспетчер задач в Windows 10? - PullRequest
0 голосов
/ 09 октября 2019

Я хочу получить процессор и использование памяти процессами, которые показаны в диспетчере задач. Я пробовал wmi, performancecounter, но ни одно из них не показывает те же значения в диспетчере задач.

РЕДАКТИРОВАТЬ: я не хочу получить общее использование процессора и памяти компьютера, на который есть ответы на другие вопросы. Я хочу получить эти значения для каждой группы приложений в диспетчере задач.

Диспетчер задач в Windows 10 группирует процессы по имени приложения. Например, в Skype есть некоторые службы, работающие в фоновом режиме, и они отображаются как сгруппированные по имени «Skype», а диспетчер задач отображает общее использование процессора и памяти этими процессами.

Снимок экрана диспетчера задач

Я попытался найти свойства процессов с помощью Process.GetProcesses (), но не смог найти какое-либо общее свойство для этих процессов.

Вкратце, как группировать процессыточно так же, как диспетчер задач в Windows 10 и вычислять значения процессора и использования памяти точно так же, как в диспетчере задач в C #?

Другими словами, как мне скопировать таблицу текущих процессов точно так же, как диспетчер задачв Windows 10?



        public class CPU_Memory_Calculator
        {
            private double _percentCPU = 0, _memoryMB = 0;

            public double GetPercentCPU { get { return _percentCPU; } }
            public double GetMemoryMB { get { return _memoryMB; } }

            public CPU_Memory_Calculator(string processName)
            {
                Process[] processArray = Process.GetProcesses().Where(x => x.ProcessName.ToLower().Contains(processName.ToLower())).ToArray();
                if (processArray.Length >= 0)
                {
                    double totalMemory = 0;

                    using (ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2",
                                "SELECT * FROM Win32_PerfFormattedData_PerfProc_Process WHERE Name LIKE '%" + processName + "%'"))
                    {
                        foreach (ManagementObject obj in searcher.Get())
                        {
                            double memory = Convert.ToDouble(obj["WorkingSet"]) / 1024.0 / 1024.0;
                            totalMemory += memory;
                        }
                    }

                    _memoryMB = Math.Round(totalMemory, 2);
                }

            }
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...